Skip to content

Commit 1afd231

Browse files
committed
add a new result class
1 parent 4aa38bf commit 1afd231

7 files changed

Lines changed: 102 additions & 80 deletions

File tree

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ WHERE users.Gender='M' AND users.userID<3000
8282

8383
### 3. VALIDATE WITH Statement
8484

85-
The `VALIDATE WITH` statement specifies validation data with the same syntax as `TRAIN WITH`. This statement defines the validation set used for model selection. If omitted, `validate_result` will be `None`.
85+
The `VALIDATE WITH` statement specifies validation data with the same syntax as `TRAIN WITH`. This statement defines the validation set used for model selection. If omitted, `result.validate_result` will be `None`.
8686

8787
#### Syntax
8888

@@ -130,14 +130,13 @@ This will install TLSQL in development mode, allowing you to make changes to the
130130
```python
131131
import tlsql
132132

133-
# Workflow mode: PREDICT only (auto-generates TRAIN)
133+
134134
result = tlsql.convert(
135135
predict_query="PREDICT VALUE(users.Age, CLF) FROM users WHERE users.Gender='F'"
136136
)
137137
print(result.predict.statement_type) # 'PREDICT'
138138
print(result.predict.target_column) # 'users.Age'
139139
print(result.predict.task_type) # 'CLF'
140-
print(result.train.sql) # Auto-generated TRAIN SQL
141140
```
142141

143142
### Examples

__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"""
1616

1717
from typing import Optional
18-
from tlsql.tlsql.sql_generator import SQLGenerator, ConversionResult
18+
from tlsql.tlsql.sql_generator import SQLGenerator, ConversionResult, StatementResult
1919
__version__ = "0.1.0"
2020
__author__ = "TLSQL Team"
2121

@@ -37,7 +37,9 @@ def convert(
3737
validate_query: VALIDATE TLSQL statement (optional).
3838
3939
Returns:
40-
ConversionResult: Contains predict_result, train_result, and validate_result.
40+
ConversionResult: Contains predict_result (StatementResult), train_result (StatementResult),
41+
and validate_result (Optional[StatementResult]). Use shortcut properties result.predict,
42+
result.train, and result.validate to access individual statement results.
4143
4244
"""
4345

@@ -79,6 +81,7 @@ def convert(
7981
from tlsql.tlsql.sql_generator import (
8082
GeneratedSQL,
8183
ConversionResult,
84+
StatementResult,
8285
)
8386

8487
# AST nodes (all AST components)
@@ -124,6 +127,7 @@ def convert(
124127
"SQLGenerator",
125128
"GeneratedSQL",
126129
"ConversionResult",
130+
"StatementResult",
127131
# AST nodes
128132
"ASTNode",
129133
"Statement",

docs/source/conversion.rst

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ The conversion process consists of four main steps:
8585

8686
4. **Result Assembly**
8787

88-
**Used Class:** :class:`ConversionResult`
88+
**Used Classes:** :class:`ConversionResult` and :class:`StatementResult`
8989

90-
The final standard SQL statement is constructed and wrapped in a ``ConversionResult`` object, which contains all extracted metadata.
90+
The final standard SQL statement is constructed and wrapped in a ``StatementResult`` object, which contains all extracted metadata for a single statement. For workflow conversions, multiple ``StatementResult`` objects are wrapped in a ``ConversionResult`` object.
9191

9292
**Standard SQL:**
9393

@@ -99,9 +99,19 @@ The conversion process consists of four main steps:
9999

100100
The conversion returns a ``ConversionResult`` object containing:
101101

102-
- ``statement_type``: ``'PREDICT'``
103-
- ``target_column``: ``'users.Age'``
104-
- ``task_type``: ``'CLF'``
105-
- ``target_table``: ``'users'``
106-
- ``where_condition``: ``"Gender = 'F'"``
102+
- ``predict_result``: A ``StatementResult`` object with:
103+
- ``statement_type``: ``'PREDICT'``
104+
- ``target_column``: ``'users.Age'``
105+
- ``task_type``: ``'CLF'``
106+
- ``target_table``: ``'users'``
107+
- ``where_condition``: ``"Gender = 'F'"``
108+
- ``sql_list``: List of ``GeneratedSQL`` objects
109+
- ``train_result``: A ``StatementResult`` object for TRAIN statement
110+
- ``validate_result``: An optional ``StatementResult`` object for VALIDATE statement (None if not provided)
111+
112+
You can access these results using the shortcut properties:
113+
114+
- ``result.predict.sql`` - Get PREDICT SQL string
115+
- ``result.train.sql`` - Get TRAIN SQL string
116+
- ``result.validate.sql`` - Get VALIDATE SQL string (returns None if not provided)
107117

docs/source/index.rst

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ TLSQL Documentation
22
===================
33

44
TLSQL is a system designed to simplify machine learning workflows on structured tabular data. It translates SQL-like statements into standard SQL queries and structured learning task descriptions, enabling data scientists and engineers to focus on model development instead of writing complex SQL or manually managing datasets.
5+
56
TLSQL works seamlessly with **RDBs, data warehouses, and data lakes**, enabling end-to-end table-based ML workflows.
67

78

@@ -29,15 +30,13 @@ Quick Start
2930
3031
import tlsql
3132
32-
# Workflow mode: PREDICT only (auto-generates TRAIN)
3333
result = tlsql.convert(
3434
predict_query="PREDICT VALUE(users.Age, CLF) FROM users WHERE users.Gender='F'"
3535
)
3636
print(result.predict.statement_type) # 'PREDICT'
3737
print(result.predict.target_column) # 'users.Age'
3838
print(result.predict.task_type) # 'CLF'
39-
print(result.train.sql) # Auto-generated TRAIN SQL
40-
39+
4140
Components
4241
----------
4342

docs/source/modules/core/sql_generator.rst

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,22 @@ SQL Generator Class
3535
The :class:`SQLGenerator` class provides the core SQL generation functionality:
3636

3737
.. autoclass:: tlsql.tlsql.sql_generator.SQLGenerator
38-
:no-members:
38+
:members: convert_query
39+
:exclude-members: __init__, generate, build, generate_train_sql, generate_validate_sql, generate_predict_sql, auto_generate_train, _build_select_sql, _expr_to_sql, _group_columns_by_table, _split_where_by_table, _extract_and_conditions, _extract_table_from_expr
3940
:no-inherited-members:
4041
:show-inheritance:
4142

4243
Result Classes
4344
~~~~~~~~~~~~~~
4445

4546
.. autoclass:: tlsql.tlsql.sql_generator.ConversionResult
46-
:no-members:
47+
:members: predict, train, validate
48+
:no-inherited-members:
49+
:show-inheritance:
50+
:noindex:
51+
52+
.. autoclass:: tlsql.tlsql.sql_generator.StatementResult
53+
:members: sql, get_sql, format_sql_list, is_predict, is_train, is_validate
4754
:no-inherited-members:
4855
:show-inheritance:
4956
:noindex:

tlsql/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
Statement,
3535
)
3636
from .exceptions import TLSQLError, LexerError, ParseError, GenerationError
37-
from .sql_generator import SQLGenerator, GeneratedSQL, ConversionResult
37+
from .sql_generator import SQLGenerator, GeneratedSQL, ConversionResult, StatementResult
3838
from typing import Optional
3939

4040

@@ -47,7 +47,9 @@ def convert(predict_query: str, train_query: Optional[str] = None, validate_quer
4747
validate_query: VALIDATE TLSQL statement (optional).
4848
4949
Returns:
50-
ConversionResult: Contains predict_result, train_result, and validate_result.
50+
ConversionResult: Contains predict_result (StatementResult), train_result (StatementResult),
51+
and validate_result (Optional[StatementResult]). Use shortcut properties result.predict,
52+
result.train, and result.validate to access individual statement results.
5153
"""
5254
import sys
5355
parent_module = sys.modules.get('tlsql')
@@ -97,6 +99,7 @@ def convert(predict_query: str, train_query: Optional[str] = None, validate_quer
9799
# SQL generator results
98100
"GeneratedSQL",
99101
"ConversionResult",
102+
"StatementResult",
100103
# Top-level API
101104
"convert",
102105
]

0 commit comments

Comments
 (0)