# Query Commands

Execute SQL queries using Trino.

## Basic Usage


```bash
tdx query [options] [sql]
```

## Options

| Option | Description | Default |
|  --- | --- | --- |
| `-f, --file <path>` | Read SQL from file | - |
| `-d, --database <db>` | Database to query | information_schema |
| `--in <db>` | Alias for `--database` | - |
| `--catalog <catalog>` | Trino catalog | td |
| `--limit <rows>` | Maximum rows to display | 40 |


## Examples

### Inline Query


```bash
# Simple query
tdx query "SELECT * FROM mydb.users LIMIT 10"

# With database flag
tdx query "SELECT * FROM users" --in mydb
tdx query "SELECT * FROM users" --database mydb
tdx query "SELECT * FROM users" -d mydb
```

### File Input

Read SQL from file:


```bash
# Auto-detect .sql file (recommended)
tdx query query.sql

# Explicit file option
tdx query --file query.sql
tdx query -f query.sql

# With options
tdx query query.sql --database mydb --json --output results.json
```

### Stdin Input

Read SQL from stdin using `-`:


```bash
# Pipe SQL from echo
echo "SELECT * FROM mydb.users LIMIT 10" | tdx query -

# Pipe from file
cat query.sql | tdx query -

# Pipe from another command
generate-sql.sh | tdx query -
```

### Multi-Statement Execution

Execute multiple SQL statements sequentially:


```bash
# From command line
tdx query "SELECT COUNT(*) FROM users; SELECT COUNT(*) FROM orders"

# From file
tdx query -f setup-and-query.sql
```

**Example multi-statement file** (`setup-and-query.sql`):


```sql
CREATE TABLE temp_users AS SELECT * FROM users WHERE active = true;
CREATE TABLE temp_orders AS SELECT * FROM orders WHERE user_id IN (SELECT id FROM temp_users);
SELECT COUNT(*) as order_count FROM temp_orders;
```

**Output behavior:**

- Each statement executes sequentially with progress indication
- **Console output**: All results displayed as they complete
- **File output** (`--output`): All results appended to single file
- **Fail-fast**: Execution stops on first error


### Output Formats


```bash
# Table format (default)
tdx query "SELECT * FROM users LIMIT 5"

# JSON format
tdx query "SELECT * FROM users" --json

# JSON Lines format
tdx query "SELECT * FROM users" --jsonl

# TSV format
tdx query "SELECT * FROM users" --tsv

# Save to file
tdx query "SELECT * FROM users" --output results.json
```

## Multi-Statement Output Example


```
✔ Statement 1/3 - Query completed: Processed 1,000 rows in 2.3s
┌────────────┐
│ user_count │
├────────────┤
│ 1000       │
└────────────┘
✔ Statement 2/3 - Query completed: Processed 5,000 rows in 3.1s
┌─────────────┐
│ order_count │
├─────────────┤
│ 5000        │
└─────────────┘
```