Source code for tlsql

"""TLSQL: A SQL-like language designed for relational table learning tasks and workflows.

This package converts TLSQL workflow statements into standard SQL:
- PREDICT VALUE: Prediction target queries (required)
- TRAIN WITH: Training data queries (optional, auto-generated if not provided)
- VALIDATE WITH: Validation data queries (optional)

Usage:
    >>> from tlsql import convert
    >>> result = convert("PREDICT VALUE(users.Age, CLF) FROM users WHERE users.Gender='F'")
    >>> print(result.statement_type)
    >>> print(result.sql)
"""

from typing import Optional, List
from tlsql.tlsql.sql_generator import SQLGenerator, ConversionResult, StatementResult
__version__ = "0.1.0"
__author__ = "TLSQL Team"


[docs] def convert(tlsql: str) -> StatementResult: """Convert a single TLSQL statement to standard SQL. Args: tlsql: One TLSQL statement (PREDICT, TRAIN, or VALIDATE). Returns: StatementResult with sql_list, target_table, where_condition, etc. """ return SQLGenerator.convert(tlsql)
[docs] def convert_workflow_queries( query_list: List[Optional[str]], table_list: Optional[List[str]] = None ) -> ConversionResult: """Workflow-level API built on convert(). It takes three statements at once and returns a ConversionResult. PREDICT is required; TRAIN and VALIDATEare optional. When TRAIN is omitted, it is auto-generated from the PREDICT statement and table_list (PREDICT table: NOT(WHERE); other tables: SELECT *). Args: query_list: List of three TLSQL strings [PREDICT, TRAIN, VALIDATE]. Only the first (PREDICT) is required; the others may be None or "". table_list: List of table names used when auto-generating TRAIN. Required when query_list[1] (TRAIN) is not provided. Returns: ConversionResult containing predict_result, train_result, and validate_result (None if VALIDATE not provided). Use result.predict, result.train, and result.validate for access. """ if not query_list or len(query_list) != 3: raise ValueError("query_list must contain exactly three elements [PREDICT, TRAIN, VALIDATE].") predict_query, train_query, validate_query = query_list[0], query_list[1], query_list[2] if not predict_query or not str(predict_query).strip(): raise ValueError("PREDICT statement (query_list[0]) is required.") generator = SQLGenerator() predict_result = SQLGenerator.convert(predict_query) has_train = train_query and str(train_query).strip() if not has_train and not table_list: raise ValueError("table_list is required when TRAIN statement (query_list[1]) is not provided.") train_result = ( SQLGenerator.convert(train_query) if has_train else generator.auto_generate_train(predict_result, table_list=table_list) ) validate_result = ( SQLGenerator.convert(validate_query) if validate_query and str(validate_query).strip() else None ) return ConversionResult( predict_result=predict_result, train_result=train_result, validate_result=validate_result )
# Tokens from tlsql.tlsql.tokens import Token, TokenType # Core classes from tlsql.tlsql.lexer import Lexer from tlsql.tlsql.parser import Parser from tlsql.tlsql.sql_generator import ( GeneratedSQL, ConversionResult, StatementResult, ) # AST nodes (all AST components) from tlsql.tlsql.ast_nodes import ( ASTNode, Statement, TrainStatement, ValidateStatement, PredictStatement, ValueClause, FromClause, WhereClause, ColumnSelector, WithClause, TablesClause, BinaryExpr, UnaryExpr, ColumnExpr, LiteralExpr, BetweenExpr, InExpr, ColumnReference, PredictType, ) # Exceptions from tlsql.tlsql.exceptions import ( TLSQLError, LexerError, ParseError, GenerationError, ) __all__ = [ # Top-level API "convert", "convert_workflow_queries", # Tokens "Token", "TokenType", # Core classes "Lexer", "Parser", "SQLGenerator", "GeneratedSQL", "ConversionResult", "StatementResult", # AST nodes "ASTNode", "Statement", "TrainStatement", "ValidateStatement", "PredictStatement", "ValueClause", "FromClause", "WhereClause", "ColumnSelector", "WithClause", "TablesClause", "BinaryExpr", "UnaryExpr", "ColumnExpr", "LiteralExpr", "BetweenExpr", "InExpr", "ColumnReference", "PredictType", # Exceptions "TLSQLError", "LexerError", "ParseError", "GenerationError", ]