{"version":3,"file":"execute-sql.mjs","names":[],"sources":["../../src/actions/execute-sql.ts"],"sourcesContent":["import type { AppAction } from \"@keystrokehq/keystroke/app\";\nimport { z } from \"zod\";\n\nimport { action } from \"../action\";\nimport { snowflake } from \"../app\";\n\nexport const SnowflakeExecuteSqlInput = z.object({\n  role: z.string().describe(\"Role name to use for execution (case-sensitive). If not specified, uses the user's DEFAULT_ROLE setting.\").optional(),\n  timeout: z.number().int().describe(\"Execution timeout in seconds. Set to 0 for maximum timeout (604800 seconds). If not specified, uses the default timeout.\").optional(),\n  bindings: z.record(z.string(), z.unknown()).describe(\"Values of bind variables in the SQL statement. Use this for parameterized queries to prevent SQL injection.\").optional(),\n  database: z.string().describe(\"Database name to use for execution (case-sensitive). If not specified, uses the user's DEFAULT_NAMESPACE setting.\").optional(),\n  statement: z.string().describe(\"SQL statement(s) to execute. Supports SELECT queries, DDL (CREATE, ALTER, DROP), and DML (INSERT, UPDATE, DELETE). Multiple statements can be separated by semicolons; they will be executed in sequence automatically. When querying INFORMATION_SCHEMA, always filter on both `table_schema` and `table_catalog` and wrap mixed AND/OR conditions in parentheses. For multi-statement batches, test critical sections in isolation first — a single failing statement obscures root cause.\"),\n  warehouse: z.string().describe(\"Warehouse name to use for query execution (case-sensitive). Required for queries that need compute resources. If not specified, uses the user's DEFAULT_WAREHOUSE setting. Suspended or undersized warehouses cause high latency or timeouts; verify the warehouse is active and appropriately sized before execution.\").optional(),\n  parameters: z.record(z.string(), z.unknown()).describe(\"Session parameters to set for the statement execution. These are Snowflake session-level parameters.\").optional(),\n  schema_name: z.string().describe(\"Schema name to use for execution (case-sensitive). If not specified, uses the user's DEFAULT_NAMESPACE setting.\").optional(),\n});\nconst SnowflakeExecuteSql_RowTypeMetadataSchema = z.object({\n  name: z.string().describe(\"Column name\").nullable(),\n  type: z.string().describe(\"Data type of the column\").nullable(),\n  scale: z.number().int().describe(\"Scale for numeric types\").nullable().optional(),\n  table: z.string().describe(\"Table name\").nullable(),\n  length: z.number().int().describe(\"Length for text types\").nullable().optional(),\n  schema: z.string().describe(\"Schema name\").nullable(),\n  database: z.string().describe(\"Database name\").nullable(),\n  nullable: z.boolean().describe(\"Whether the column is nullable\").nullable(),\n  collation: z.string().describe(\"Collation for text types\").nullable().optional(),\n  precision: z.number().int().describe(\"Precision for numeric types\").nullable().optional(),\n  byteLength: z.number().int().describe(\"Byte length for text types\").nullable().optional(),\n}).passthrough();\nconst SnowflakeExecuteSql_PartitionInfoSchema = z.object({\n  rowCount: z.number().int().describe(\"Number of rows in this partition\").nullable(),\n  uncompressedSize: z.number().int().describe(\"Uncompressed size in bytes\").nullable(),\n}).passthrough();\nconst SnowflakeExecuteSql_ResultSetMetaDataSchema = z.object({\n  format: z.string().describe(\"Format of the result data (e.g., 'jsonv2')\").nullable(),\n  numRows: z.number().int().describe(\"Total number of rows in the result set\").nullable(),\n  rowType: z.array(SnowflakeExecuteSql_RowTypeMetadataSchema).describe(\"Metadata for each column in the result set\"),\n  partitionInfo: z.array(SnowflakeExecuteSql_PartitionInfoSchema).describe(\"Information about data partitions\"),\n}).passthrough();\nexport const SnowflakeExecuteSqlOutput = z.object({\n  code: z.string().describe(\"Status code from Snowflake (e.g., '090001' for success)\").nullable().optional(),\n  data: z.array(z.array(z.union([z.string(), z.number().int(), z.number(), z.boolean()]).nullable())).describe(\"The result set rows (single statement only). For multi-statement execution, use statementHandles to retrieve results individually.\").nullable().optional(),\n  message: z.string().describe(\"Execution status message\").nullable().optional(),\n  sqlState: z.string().describe(\"SQL state code (e.g., '00000' for success)\").nullable().optional(),\n  createdOn: z.number().int().describe(\"Timestamp in milliseconds since epoch when the statement was created\").nullable().optional(),\n  statementHandle: z.string().describe(\"Unique identifier for the executed statement (single statement only)\").nullable().optional(),\n  statementHandles: z.array(z.string()).describe(\"Array of statement handles for multi-statement execution. Use these handles with CHECK_STATEMENT_STATUS to retrieve results for each statement.\").nullable().optional(),\n  resultSetMetaData: SnowflakeExecuteSql_ResultSetMetaDataSchema.nullable().optional(),\n  statementStatusUrl: z.string().describe(\"URL to check the execution status\").nullable().optional(),\n  composio_execution_message: z.string().describe(\"Additional execution information from Composio\").nullable().optional(),\n}).passthrough();\n\nexport const snowflakeExecuteSql: AppAction<\n  typeof SnowflakeExecuteSqlInput,\n  typeof SnowflakeExecuteSqlOutput,\n  typeof snowflake.credential\n> = action(\"SNOWFLAKE_EXECUTE_SQL\", {\n  slug: \"snowflake-execute-sql\",\n  name: \"Execute SQL\",\n  description: \"Execute SQL statements in Snowflake and retrieve results. Supports SELECT queries for data retrieval, DDL statements (CREATE, ALTER, DROP) for schema management, and DML statements (INSERT, UPDATE, DELETE) for data modification. Returns comprehensive result metadata including column types, row counts, and execution status. Unquoted SQL identifiers are auto-uppercased by Snowflake — use matching case in `database`, `schema_name`, `warehouse`, and `role` parameters to avoid 'object not found' errors. Always apply explicit time-range filters and a LIMIT clause to unbounded SELECT queries to prevent large, slow result sets.\",\n  input: SnowflakeExecuteSqlInput,\n  output: SnowflakeExecuteSqlOutput,\n});\n"],"mappings":"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"}