diff options
Diffstat (limited to 'agents/sql/tools.sh')
| -rwxr-xr-x | agents/sql/tools.sh | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/agents/sql/tools.sh b/agents/sql/tools.sh new file mode 100755 index 0000000..dc3062a --- /dev/null +++ b/agents/sql/tools.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +set -e + +ROOT_DIR="${LLM_ROOT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}" + +# @meta require-tools usql +# @env LLM_AGENT_VAR_DSN! The database connection url. e.g. pgsql://user:pass@host:port + +# @cmd Execute a SELECT query +# @option --query! SELECT SQL query to execute +read_query() { + if ! grep -qi '^select' <<<"$argc_query"; then + echo "error: only SELECT query is allowed" >&2 + exit 1 + fi + _run_sql "$argc_query" +} + +# @cmd Execute an SQL query +# @option --query! SQL query to execute +write_query() { + "$ROOT_DIR/utils/guard_operation.sh" "Execute SQL?" + _run_sql "$argc_query" +} + +# @cmd List all tables +list_tables() { + _run_sql "\dt+" +} + +# @cmd Get the schema information for a specific table +# @option --table-name! Name of the table to describe +describe_table() { + _run_sql "\d $argc_table_name" +} + +_run_sql() { + usql "$LLM_AGENT_VAR_DSN" -c "$1" >> "$LLM_OUTPUT" +} + +# See more details at https://github.com/sigoden/argc +eval "$(argc --argc-eval "$0" "$@")" |
