126 lines
3.5 KiB
Plaintext
126 lines
3.5 KiB
Plaintext
|
|
---
|
|
|
|
### **Core Syntax Specification**
|
|
|
|
#### 1. **Basic Column Access**
|
|
```python
|
|
@{column} # Current table's column value
|
|
```
|
|
**Examples:**
|
|
- `@project_name` - Current project's name
|
|
- `@budget` - Current record's budget value
|
|
|
|
---
|
|
|
|
#### 2. **Direct Relationship Access**
|
|
```python
|
|
@{table}.{column} # Direct parent/child single record
|
|
@{table}.{column}[0] # First record in one-to-many
|
|
```
|
|
**Examples:**
|
|
- `@author.name` - Name of directly linked author
|
|
- `@order_items.quantity[0]` - Quantity from first order item
|
|
|
|
---
|
|
|
|
#### 3. **Collection Operations**
|
|
```python
|
|
@{table}.{column}.list # All values from relationship
|
|
@{table}.{column}.all # All values from table
|
|
```
|
|
**Examples:**
|
|
- `@products.price.list` - List of prices from linked products
|
|
- `@customers.email.all` - All customer emails in table
|
|
|
|
---
|
|
|
|
#### 4. **Deep Relationship Navigation**
|
|
```python
|
|
@{target_table}.{column} # Column from any linked table (automatically resolves path)
|
|
@{target_table}.{column}[n] # Indexed access to a specific row in a one-to-many relationship
|
|
```
|
|
**Examples:**
|
|
- `@customer.address` - Customer address (resolves through any path, e.g., `order → customer`)
|
|
- `@products[2].sku` - Third product's SKU (resolves through any path, e.g., `order → products`)
|
|
|
|
---
|
|
|
|
#### 5. **SQL Integration**
|
|
```python
|
|
@sql.@{column}(query) # Custom SQL for a specific column
|
|
@sql.@{table}.{column}(query) # Custom SQL for a linked table's column
|
|
@sql(query) # Raw SQL execution
|
|
```
|
|
**Examples:**
|
|
- `@sql.@budget("SELECT AVG(budget) FROM current_table")`
|
|
- `@sql.@products.price("SELECT MAX(price) FROM {linked_products}")`
|
|
- `@sql("SELECT COUNT(*) FROM archived_orders")`
|
|
|
|
---
|
|
|
|
### **Key Changes and Clarifications**
|
|
|
|
1. **Deep Relationship Navigation**
|
|
- Only the **target table name** is specified.
|
|
- The system **automatically resolves the path** using the relationships defined in `table_definition_links`.
|
|
- Example:
|
|
```python
|
|
@customer.address # Resolves through any path (e.g., order → customer)
|
|
@products[0].sku # Resolves through any path (e.g., order → products)
|
|
```
|
|
|
|
2. **Indexed Access**
|
|
- Use `[n]` to access a specific row in a one-to-many relationship.
|
|
- Example:
|
|
```python
|
|
@products[2].price # Price of the third linked product
|
|
```
|
|
|
|
3. **Collection Operations**
|
|
- `.list` and `.all` are used to differentiate between:
|
|
- **Relationship-specific collections** (`.list`)
|
|
- **Entire table collections** (`.all`)
|
|
|
|
4. **SQL Integration**
|
|
- Allows custom SQL for specific columns or tables.
|
|
- Ensures SQL queries are scoped to the current context.
|
|
|
|
---
|
|
|
|
### **Examples**
|
|
|
|
#### Basic Column Access
|
|
```python
|
|
@project_name # "Project Alpha"
|
|
@budget # "10000"
|
|
```
|
|
|
|
#### Direct Relationship Access
|
|
```python
|
|
@author.name # "John Doe"
|
|
@order_items[0].price # "49.99"
|
|
```
|
|
|
|
#### Collection Operations
|
|
```python
|
|
@products.price.list # ["49.99", "99.99", "149.99"]
|
|
@customers.email.all # ["john@example.com", "jane@example.com"]
|
|
```
|
|
|
|
#### Deep Relationship Navigation
|
|
```python
|
|
@customer.address # "123 Main St" (resolves through order → customer)
|
|
@products[1].sku # "SKU12345" (resolves through order → products)
|
|
```
|
|
|
|
#### SQL Integration
|
|
```python
|
|
@sql.@budget("SELECT AVG(budget) FROM current_table") # "7500"
|
|
@sql.@products.price("SELECT MAX(price) FROM {linked_products}") # "149.99"
|
|
@sql("SELECT COUNT(*) FROM archived_orders") # "42"
|
|
```
|
|
|
|
---
|
|
|