/*
 * This file was auto-generated by speedy-antlr-tool v1.3.1
 *  https://github.com/amykyta3/speedy-antlr-tool
 */

#include "sa_tsql_translator.h"


SA_tsqlTranslator::SA_tsqlTranslator(speedy_antlr::Translator *translator) {
    this->translator = translator;
}

SA_tsqlTranslator::~SA_tsqlTranslator() {
    Py_XDECREF(Tsql_fileContext_cls);
    Py_XDECREF(BatchContext_cls);
    Py_XDECREF(Sql_clausesContext_cls);
    Py_XDECREF(Sql_clauseContext_cls);
    Py_XDECREF(Dml_clauseContext_cls);
    Py_XDECREF(Ddl_clauseContext_cls);
    Py_XDECREF(Cfl_statementContext_cls);
    Py_XDECREF(Cfl_clauseContext_cls);
    Py_XDECREF(Block_statementContext_cls);
    Py_XDECREF(Break_statementContext_cls);
    Py_XDECREF(Continue_statementContext_cls);
    Py_XDECREF(Goto_statementContext_cls);
    Py_XDECREF(If_statementContext_cls);
    Py_XDECREF(If_blockContext_cls);
    Py_XDECREF(Return_statementContext_cls);
    Py_XDECREF(Throw_statementContext_cls);
    Py_XDECREF(Try_catch_statementContext_cls);
    Py_XDECREF(Waitfor_statementContext_cls);
    Py_XDECREF(While_statementContext_cls);
    Py_XDECREF(Print_statementContext_cls);
    Py_XDECREF(Raiseerror_statementContext_cls);
    Py_XDECREF(Another_statementContext_cls);
    Py_XDECREF(Delete_statementContext_cls);
    Py_XDECREF(Delete_statement_fromContext_cls);
    Py_XDECREF(Insert_statementContext_cls);
    Py_XDECREF(Insert_statement_valueContext_cls);
    Py_XDECREF(Select_statementContext_cls);
    Py_XDECREF(Update_statementContext_cls);
    Py_XDECREF(Where_clause_dmlContext_cls);
    Py_XDECREF(Output_clauseContext_cls);
    Py_XDECREF(Output_dml_list_elemContext_cls);
    Py_XDECREF(Output_column_nameContext_cls);
    Py_XDECREF(Create_databaseContext_cls);
    Py_XDECREF(Create_indexContext_cls);
    Py_XDECREF(Create_statisticsContext_cls);
    Py_XDECREF(Create_tableContext_cls);
    Py_XDECREF(Create_schemaContext_cls);
    Py_XDECREF(Create_synonymContext_cls);
    Py_XDECREF(Create_viewContext_cls);
    Py_XDECREF(View_attributeContext_cls);
    Py_XDECREF(Alter_tableContext_cls);
    Py_XDECREF(Alter_databaseContext_cls);
    Py_XDECREF(Database_optionspecContext_cls);
    Py_XDECREF(Auto_optionContext_cls);
    Py_XDECREF(Change_tracking_optionContext_cls);
    Py_XDECREF(Change_tracking_option_listContext_cls);
    Py_XDECREF(Containment_optionContext_cls);
    Py_XDECREF(Cursor_optionContext_cls);
    Py_XDECREF(Date_correlation_optimization_optionContext_cls);
    Py_XDECREF(Db_encryption_optionContext_cls);
    Py_XDECREF(Db_state_optionContext_cls);
    Py_XDECREF(Db_update_optionContext_cls);
    Py_XDECREF(Db_user_access_optionContext_cls);
    Py_XDECREF(Delayed_durability_optionContext_cls);
    Py_XDECREF(External_access_optionContext_cls);
    Py_XDECREF(Hadr_optionsContext_cls);
    Py_XDECREF(Mixed_page_allocation_optionContext_cls);
    Py_XDECREF(Parameterization_optionContext_cls);
    Py_XDECREF(Recovery_optionContext_cls);
    Py_XDECREF(Service_broker_optionContext_cls);
    Py_XDECREF(Snapshot_optionContext_cls);
    Py_XDECREF(Sql_optionContext_cls);
    Py_XDECREF(Target_recovery_time_optionContext_cls);
    Py_XDECREF(TerminationContext_cls);
    Py_XDECREF(Drop_indexContext_cls);
    Py_XDECREF(Drop_procedureContext_cls);
    Py_XDECREF(Drop_statisticsContext_cls);
    Py_XDECREF(Drop_tableContext_cls);
    Py_XDECREF(Drop_databaseContext_cls);
    Py_XDECREF(Drop_synonymContext_cls);
    Py_XDECREF(Drop_viewContext_cls);
    Py_XDECREF(Drop_schemaContext_cls);
    Py_XDECREF(Drop_functionContext_cls);
    Py_XDECREF(Create_typeContext_cls);
    Py_XDECREF(Drop_typeContext_cls);
    Py_XDECREF(Rowset_function_limitedContext_cls);
    Py_XDECREF(OpenqueryContext_cls);
    Py_XDECREF(OpendatasourceContext_cls);
    Py_XDECREF(Declare_statementContext_cls);
    Py_XDECREF(Cursor_statementContext_cls);
    Py_XDECREF(Execute_statementContext_cls);
    Py_XDECREF(Execute_statement_argContext_cls);
    Py_XDECREF(Execute_var_stringContext_cls);
    Py_XDECREF(Security_statementContext_cls);
    Py_XDECREF(Grant_permissionContext_cls);
    Py_XDECREF(Set_statementContext_cls);
    Py_XDECREF(Transaction_statementContext_cls);
    Py_XDECREF(Go_statementContext_cls);
    Py_XDECREF(Use_statementContext_cls);
    Py_XDECREF(Execute_clauseContext_cls);
    Py_XDECREF(Declare_localContext_cls);
    Py_XDECREF(Table_type_definitionContext_cls);
    Py_XDECREF(Column_def_table_constraintsContext_cls);
    Py_XDECREF(Column_def_table_constraintContext_cls);
    Py_XDECREF(Column_definitionContext_cls);
    Py_XDECREF(Column_constraintContext_cls);
    Py_XDECREF(Table_constraintContext_cls);
    Py_XDECREF(Index_optionsContext_cls);
    Py_XDECREF(Index_optionContext_cls);
    Py_XDECREF(Declare_cursorContext_cls);
    Py_XDECREF(Declare_set_cursor_commonContext_cls);
    Py_XDECREF(Fetch_cursorContext_cls);
    Py_XDECREF(Set_specialContext_cls);
    Py_XDECREF(Constant_LOCAL_IDContext_cls);
    Py_XDECREF(Binary_operator_expressionContext_cls);
    Py_XDECREF(Unary_operator_expressionContext_cls);
    Py_XDECREF(Function_call_expressionContext_cls);
    Py_XDECREF(Conversion_expressionContext_cls);
    Py_XDECREF(Case_expressionContext_cls);
    Py_XDECREF(Column_ref_expressionContext_cls);
    Py_XDECREF(String_agg_expressionContext_cls);
    Py_XDECREF(Percentile_cont_expressionContext_cls);
    Py_XDECREF(Primitive_expressionContext_cls);
    Py_XDECREF(Bracket_expressionContext_cls);
    Py_XDECREF(Subquery_expressionContext_cls);
    Py_XDECREF(Over_clause_expressionContext_cls);
    Py_XDECREF(Xml_method_expressionContext_cls);
    Py_XDECREF(Xml_method_callContext_cls);
    Py_XDECREF(Simple_xml_method_nameContext_cls);
    Py_XDECREF(Constant_expressionContext_cls);
    Py_XDECREF(SubqueryContext_cls);
    Py_XDECREF(With_expressionContext_cls);
    Py_XDECREF(Common_table_expressionContext_cls);
    Py_XDECREF(Update_elemContext_cls);
    Py_XDECREF(Search_condition_listContext_cls);
    Py_XDECREF(Search_cond_orContext_cls);
    Py_XDECREF(Search_cond_predContext_cls);
    Py_XDECREF(Search_cond_andContext_cls);
    Py_XDECREF(Binary_in_expressionContext_cls);
    Py_XDECREF(Unary_operator_expression2Context_cls);
    Py_XDECREF(Binary_mod_expressionContext_cls);
    Py_XDECREF(Unary_operator_expression3Context_cls);
    Py_XDECREF(Bracket_search_expressionContext_cls);
    Py_XDECREF(Sublink_expressionContext_cls);
    Py_XDECREF(Binary_operator_expression3Context_cls);
    Py_XDECREF(Binary_operator_expression2Context_cls);
    Py_XDECREF(Decimal_expressionContext_cls);
    Py_XDECREF(Bracket_query_expressionContext_cls);
    Py_XDECREF(Query_specification_expressionContext_cls);
    Py_XDECREF(Union_query_expressionContext_cls);
    Py_XDECREF(Union_opContext_cls);
    Py_XDECREF(Cross_apply_expressionContext_cls);
    Py_XDECREF(Query_specificationContext_cls);
    Py_XDECREF(Group_by_grouping_setsContext_cls);
    Py_XDECREF(Grouping_setContext_cls);
    Py_XDECREF(Top_clauseContext_cls);
    Py_XDECREF(Top_clause_dmContext_cls);
    Py_XDECREF(Order_by_clauseContext_cls);
    Py_XDECREF(Fetch_expressionContext_cls);
    Py_XDECREF(For_clauseContext_cls);
    Py_XDECREF(Xml_common_directivesContext_cls);
    Py_XDECREF(Order_by_expressionContext_cls);
    Py_XDECREF(Group_by_itemContext_cls);
    Py_XDECREF(Option_clauseContext_cls);
    Py_XDECREF(OptionContext_cls);
    Py_XDECREF(Optimize_for_argContext_cls);
    Py_XDECREF(Select_listContext_cls);
    Py_XDECREF(Select_list_elemContext_cls);
    Py_XDECREF(Table_sourcesContext_cls);
    Py_XDECREF(Cross_joinContext_cls);
    Py_XDECREF(Table_source_item_joinContext_cls);
    Py_XDECREF(Standard_joinContext_cls);
    Py_XDECREF(Apply_joinContext_cls);
    Py_XDECREF(Bracket_table_sourceContext_cls);
    Py_XDECREF(Table_source_item_simpleContext_cls);
    Py_XDECREF(Table_source_item_complexContext_cls);
    Py_XDECREF(Table_source_item_nameContext_cls);
    Py_XDECREF(Tablesample_clauseContext_cls);
    Py_XDECREF(Sample_numberContext_cls);
    Py_XDECREF(Repeat_seedContext_cls);
    Py_XDECREF(Table_aliasContext_cls);
    Py_XDECREF(Change_tableContext_cls);
    Py_XDECREF(Join_typeContext_cls);
    Py_XDECREF(Table_name_with_hintContext_cls);
    Py_XDECREF(Rowset_functionContext_cls);
    Py_XDECREF(Bulk_optionContext_cls);
    Py_XDECREF(Derived_tableContext_cls);
    Py_XDECREF(Standard_callContext_cls);
    Py_XDECREF(Aggregate_callContext_cls);
    Py_XDECREF(Nvf_callContext_cls);
    Py_XDECREF(Rank_callContext_cls);
    Py_XDECREF(Expression_callContext_cls);
    Py_XDECREF(Simple_callContext_cls);
    Py_XDECREF(Cast_callContext_cls);
    Py_XDECREF(Switch_sectionContext_cls);
    Py_XDECREF(Switch_search_condition_sectionContext_cls);
    Py_XDECREF(With_table_hintsContext_cls);
    Py_XDECREF(Insert_with_table_hintsContext_cls);
    Py_XDECREF(Table_hintContext_cls);
    Py_XDECREF(Index_valueContext_cls);
    Py_XDECREF(Column_alias_listContext_cls);
    Py_XDECREF(Column_aliasContext_cls);
    Py_XDECREF(A_starContext_cls);
    Py_XDECREF(Table_value_constructorContext_cls);
    Py_XDECREF(Expression_listContext_cls);
    Py_XDECREF(Value_listContext_cls);
    Py_XDECREF(Next_value_forContext_cls);
    Py_XDECREF(Next_value_for_functionContext_cls);
    Py_XDECREF(Ranking_windowed_functionContext_cls);
    Py_XDECREF(Aggregate_windowed_functionContext_cls);
    Py_XDECREF(All_distinctContext_cls);
    Py_XDECREF(Over_clauseContext_cls);
    Py_XDECREF(Row_or_range_clauseContext_cls);
    Py_XDECREF(Window_frame_extentContext_cls);
    Py_XDECREF(Window_frame_boundContext_cls);
    Py_XDECREF(Window_frame_precedingContext_cls);
    Py_XDECREF(Window_frame_followingContext_cls);
    Py_XDECREF(Create_database_optionContext_cls);
    Py_XDECREF(Database_filestream_optionContext_cls);
    Py_XDECREF(Database_file_specContext_cls);
    Py_XDECREF(File_groupContext_cls);
    Py_XDECREF(File_specContext_cls);
    Py_XDECREF(Full_table_nameContext_cls);
    Py_XDECREF(Simple_nameContext_cls);
    Py_XDECREF(Func_proc_nameContext_cls);
    Py_XDECREF(Ddl_objectContext_cls);
    Py_XDECREF(Full_column_nameContext_cls);
    Py_XDECREF(Column_name_listContext_cls);
    Py_XDECREF(Cursor_nameContext_cls);
    Py_XDECREF(On_offContext_cls);
    Py_XDECREF(ClusteredContext_cls);
    Py_XDECREF(Null_notnullContext_cls);
    Py_XDECREF(Scalar_function_nameContext_cls);
    Py_XDECREF(Default_valueContext_cls);
    Py_XDECREF(ConstantContext_cls);
    Py_XDECREF(SignContext_cls);
    Py_XDECREF(R_idContext_cls);
    Py_XDECREF(Simple_idContext_cls);
    Py_XDECREF(Comparison_operatorContext_cls);
    Py_XDECREF(Assignment_operatorContext_cls);
    Py_XDECREF(File_sizeContext_cls);
    Py_XDECREF(Create_or_alter_procedureContext_cls);
    Py_XDECREF(Create_or_alter_functionContext_cls);
    Py_XDECREF(Func_body_returns_selectContext_cls);
    Py_XDECREF(Func_body_returns_tableContext_cls);
    Py_XDECREF(Func_body_returns_scalarContext_cls);
    Py_XDECREF(Procedure_paramContext_cls);
    Py_XDECREF(Procedure_optionContext_cls);
    Py_XDECREF(Function_optionContext_cls);
    Py_XDECREF(Percentile_contContext_cls);
    Py_XDECREF(String_aggContext_cls);
    Py_XDECREF(Data_typeContext_cls);
}


antlrcpp::Any SA_tsqlTranslator::visitTsql_file(tsqlParser::Tsql_fileContext *ctx){
    if(!Tsql_fileContext_cls) Tsql_fileContext_cls = PyObject_GetAttrString(translator->parser_cls, "Tsql_fileContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Tsql_fileContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBatch(tsqlParser::BatchContext *ctx){
    if(!BatchContext_cls) BatchContext_cls = PyObject_GetAttrString(translator->parser_cls, "BatchContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, BatchContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSql_clauses(tsqlParser::Sql_clausesContext *ctx){
    if(!Sql_clausesContext_cls) Sql_clausesContext_cls = PyObject_GetAttrString(translator->parser_cls, "Sql_clausesContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Sql_clausesContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSql_clause(tsqlParser::Sql_clauseContext *ctx){
    if(!Sql_clauseContext_cls) Sql_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Sql_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Sql_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDml_clause(tsqlParser::Dml_clauseContext *ctx){
    if(!Dml_clauseContext_cls) Dml_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Dml_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Dml_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDdl_clause(tsqlParser::Ddl_clauseContext *ctx){
    if(!Ddl_clauseContext_cls) Ddl_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Ddl_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Ddl_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCfl_statement(tsqlParser::Cfl_statementContext *ctx){
    if(!Cfl_statementContext_cls) Cfl_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Cfl_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Cfl_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCfl_clause(tsqlParser::Cfl_clauseContext *ctx){
    if(!Cfl_clauseContext_cls) Cfl_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Cfl_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Cfl_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBlock_statement(tsqlParser::Block_statementContext *ctx){
    if(!Block_statementContext_cls) Block_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Block_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Block_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBreak_statement(tsqlParser::Break_statementContext *ctx){
    if(!Break_statementContext_cls) Break_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Break_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Break_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitContinue_statement(tsqlParser::Continue_statementContext *ctx){
    if(!Continue_statementContext_cls) Continue_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Continue_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Continue_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitGoto_statement(tsqlParser::Goto_statementContext *ctx){
    if(!Goto_statementContext_cls) Goto_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Goto_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Goto_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitIf_statement(tsqlParser::If_statementContext *ctx){
    if(!If_statementContext_cls) If_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "If_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, If_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitIf_block(tsqlParser::If_blockContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"if_expr", static_cast<void*>(ctx->if_expr)},
        {"else_expr", static_cast<void*>(ctx->else_expr)},
        {"if_block_expr", static_cast<void*>(ctx->if_block_expr)},
        {"else_block_expr", static_cast<void*>(ctx->else_block_expr)}
    };
    if(!If_blockContext_cls) If_blockContext_cls = PyObject_GetAttrString(translator->parser_cls, "If_blockContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, If_blockContext_cls, labels, 4);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitReturn_statement(tsqlParser::Return_statementContext *ctx){
    if(!Return_statementContext_cls) Return_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Return_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Return_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitThrow_statement(tsqlParser::Throw_statementContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"error_number", static_cast<void*>(ctx->error_number)},
        {"message", static_cast<void*>(ctx->message)},
        {"state", static_cast<void*>(ctx->state)}
    };
    if(!Throw_statementContext_cls) Throw_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Throw_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Throw_statementContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTry_catch_statement(tsqlParser::Try_catch_statementContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"try_clauses", static_cast<void*>(ctx->try_clauses)},
        {"catch_clauses", static_cast<void*>(ctx->catch_clauses)}
    };
    if(!Try_catch_statementContext_cls) Try_catch_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Try_catch_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Try_catch_statementContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitWaitfor_statement(tsqlParser::Waitfor_statementContext *ctx){
    if(!Waitfor_statementContext_cls) Waitfor_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Waitfor_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Waitfor_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitWhile_statement(tsqlParser::While_statementContext *ctx){
    if(!While_statementContext_cls) While_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "While_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, While_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitPrint_statement(tsqlParser::Print_statementContext *ctx){
    if(!Print_statementContext_cls) Print_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Print_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Print_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitRaiseerror_statement(tsqlParser::Raiseerror_statementContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"msg", static_cast<void*>(ctx->msg)},
        {"severity", static_cast<void*>(ctx->severity)},
        {"state", static_cast<void*>(ctx->state)}
    };
    if(!Raiseerror_statementContext_cls) Raiseerror_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Raiseerror_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Raiseerror_statementContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitAnother_statement(tsqlParser::Another_statementContext *ctx){
    if(!Another_statementContext_cls) Another_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Another_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Another_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDelete_statement(tsqlParser::Delete_statementContext *ctx){
    if(!Delete_statementContext_cls) Delete_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Delete_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Delete_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDelete_statement_from(tsqlParser::Delete_statement_fromContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"table_var", static_cast<void*>(ctx->table_var)}
    };
    if(!Delete_statement_fromContext_cls) Delete_statement_fromContext_cls = PyObject_GetAttrString(translator->parser_cls, "Delete_statement_fromContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Delete_statement_fromContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitInsert_statement(tsqlParser::Insert_statementContext *ctx){
    if(!Insert_statementContext_cls) Insert_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Insert_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Insert_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitInsert_statement_value(tsqlParser::Insert_statement_valueContext *ctx){
    if(!Insert_statement_valueContext_cls) Insert_statement_valueContext_cls = PyObject_GetAttrString(translator->parser_cls, "Insert_statement_valueContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Insert_statement_valueContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSelect_statement(tsqlParser::Select_statementContext *ctx){
    if(!Select_statementContext_cls) Select_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Select_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Select_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitUpdate_statement(tsqlParser::Update_statementContext *ctx){
    if(!Update_statementContext_cls) Update_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Update_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Update_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitWhere_clause_dml(tsqlParser::Where_clause_dmlContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"cursor_var", static_cast<void*>(ctx->cursor_var)}
    };
    if(!Where_clause_dmlContext_cls) Where_clause_dmlContext_cls = PyObject_GetAttrString(translator->parser_cls, "Where_clause_dmlContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Where_clause_dmlContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOutput_clause(tsqlParser::Output_clauseContext *ctx){
    if(!Output_clauseContext_cls) Output_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Output_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Output_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOutput_dml_list_elem(tsqlParser::Output_dml_list_elemContext *ctx){
    if(!Output_dml_list_elemContext_cls) Output_dml_list_elemContext_cls = PyObject_GetAttrString(translator->parser_cls, "Output_dml_list_elemContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Output_dml_list_elemContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOutput_column_name(tsqlParser::Output_column_nameContext *ctx){
    if(!Output_column_nameContext_cls) Output_column_nameContext_cls = PyObject_GetAttrString(translator->parser_cls, "Output_column_nameContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Output_column_nameContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_database(tsqlParser::Create_databaseContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"database", static_cast<void*>(ctx->database)},
        {"collation_name", static_cast<void*>(ctx->collation_name)}
    };
    if(!Create_databaseContext_cls) Create_databaseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_databaseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_databaseContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_index(tsqlParser::Create_indexContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"where", static_cast<void*>(ctx->where)}
    };
    if(!Create_indexContext_cls) Create_indexContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_indexContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_indexContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_statistics(tsqlParser::Create_statisticsContext *ctx){
    if(!Create_statisticsContext_cls) Create_statisticsContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_statisticsContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_statisticsContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_table(tsqlParser::Create_tableContext *ctx){
    if(!Create_tableContext_cls) Create_tableContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_tableContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_tableContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_schema(tsqlParser::Create_schemaContext *ctx){
    if(!Create_schemaContext_cls) Create_schemaContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_schemaContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_schemaContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_synonym(tsqlParser::Create_synonymContext *ctx){
    if(!Create_synonymContext_cls) Create_synonymContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_synonymContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_synonymContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_view(tsqlParser::Create_viewContext *ctx){
    if(!Create_viewContext_cls) Create_viewContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_viewContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_viewContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitView_attribute(tsqlParser::View_attributeContext *ctx){
    if(!View_attributeContext_cls) View_attributeContext_cls = PyObject_GetAttrString(translator->parser_cls, "View_attributeContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, View_attributeContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitAlter_table(tsqlParser::Alter_tableContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"constraint", static_cast<void*>(ctx->constraint)},
        {"fk", static_cast<void*>(ctx->fk)},
        {"pk", static_cast<void*>(ctx->pk)}
    };
    if(!Alter_tableContext_cls) Alter_tableContext_cls = PyObject_GetAttrString(translator->parser_cls, "Alter_tableContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Alter_tableContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitAlter_database(tsqlParser::Alter_databaseContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"database", static_cast<void*>(ctx->database)},
        {"new_name", static_cast<void*>(ctx->new_name)},
        {"collation", static_cast<void*>(ctx->collation)}
    };
    if(!Alter_databaseContext_cls) Alter_databaseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Alter_databaseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Alter_databaseContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDatabase_optionspec(tsqlParser::Database_optionspecContext *ctx){
    if(!Database_optionspecContext_cls) Database_optionspecContext_cls = PyObject_GetAttrString(translator->parser_cls, "Database_optionspecContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Database_optionspecContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitAuto_option(tsqlParser::Auto_optionContext *ctx){
    if(!Auto_optionContext_cls) Auto_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Auto_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Auto_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitChange_tracking_option(tsqlParser::Change_tracking_optionContext *ctx){
    if(!Change_tracking_optionContext_cls) Change_tracking_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Change_tracking_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Change_tracking_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitChange_tracking_option_list(tsqlParser::Change_tracking_option_listContext *ctx){
    if(!Change_tracking_option_listContext_cls) Change_tracking_option_listContext_cls = PyObject_GetAttrString(translator->parser_cls, "Change_tracking_option_listContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Change_tracking_option_listContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitContainment_option(tsqlParser::Containment_optionContext *ctx){
    if(!Containment_optionContext_cls) Containment_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Containment_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Containment_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCursor_option(tsqlParser::Cursor_optionContext *ctx){
    if(!Cursor_optionContext_cls) Cursor_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Cursor_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Cursor_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDate_correlation_optimization_option(tsqlParser::Date_correlation_optimization_optionContext *ctx){
    if(!Date_correlation_optimization_optionContext_cls) Date_correlation_optimization_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Date_correlation_optimization_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Date_correlation_optimization_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDb_encryption_option(tsqlParser::Db_encryption_optionContext *ctx){
    if(!Db_encryption_optionContext_cls) Db_encryption_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Db_encryption_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Db_encryption_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDb_state_option(tsqlParser::Db_state_optionContext *ctx){
    if(!Db_state_optionContext_cls) Db_state_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Db_state_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Db_state_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDb_update_option(tsqlParser::Db_update_optionContext *ctx){
    if(!Db_update_optionContext_cls) Db_update_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Db_update_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Db_update_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDb_user_access_option(tsqlParser::Db_user_access_optionContext *ctx){
    if(!Db_user_access_optionContext_cls) Db_user_access_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Db_user_access_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Db_user_access_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDelayed_durability_option(tsqlParser::Delayed_durability_optionContext *ctx){
    if(!Delayed_durability_optionContext_cls) Delayed_durability_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Delayed_durability_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Delayed_durability_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitExternal_access_option(tsqlParser::External_access_optionContext *ctx){
    if(!External_access_optionContext_cls) External_access_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "External_access_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, External_access_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitHadr_options(tsqlParser::Hadr_optionsContext *ctx){
    if(!Hadr_optionsContext_cls) Hadr_optionsContext_cls = PyObject_GetAttrString(translator->parser_cls, "Hadr_optionsContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Hadr_optionsContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitMixed_page_allocation_option(tsqlParser::Mixed_page_allocation_optionContext *ctx){
    if(!Mixed_page_allocation_optionContext_cls) Mixed_page_allocation_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Mixed_page_allocation_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Mixed_page_allocation_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitParameterization_option(tsqlParser::Parameterization_optionContext *ctx){
    if(!Parameterization_optionContext_cls) Parameterization_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Parameterization_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Parameterization_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitRecovery_option(tsqlParser::Recovery_optionContext *ctx){
    if(!Recovery_optionContext_cls) Recovery_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Recovery_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Recovery_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitService_broker_option(tsqlParser::Service_broker_optionContext *ctx){
    if(!Service_broker_optionContext_cls) Service_broker_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Service_broker_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Service_broker_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSnapshot_option(tsqlParser::Snapshot_optionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT", static_cast<void*>(ctx->MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT)}
    };
    if(!Snapshot_optionContext_cls) Snapshot_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Snapshot_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Snapshot_optionContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSql_option(tsqlParser::Sql_optionContext *ctx){
    if(!Sql_optionContext_cls) Sql_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Sql_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Sql_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTarget_recovery_time_option(tsqlParser::Target_recovery_time_optionContext *ctx){
    if(!Target_recovery_time_optionContext_cls) Target_recovery_time_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Target_recovery_time_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Target_recovery_time_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTermination(tsqlParser::TerminationContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"seconds", static_cast<void*>(ctx->seconds)}
    };
    if(!TerminationContext_cls) TerminationContext_cls = PyObject_GetAttrString(translator->parser_cls, "TerminationContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, TerminationContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_index(tsqlParser::Drop_indexContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"name", static_cast<void*>(ctx->name)}
    };
    if(!Drop_indexContext_cls) Drop_indexContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_indexContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_indexContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_procedure(tsqlParser::Drop_procedureContext *ctx){
    if(!Drop_procedureContext_cls) Drop_procedureContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_procedureContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_procedureContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_statistics(tsqlParser::Drop_statisticsContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"name", static_cast<void*>(ctx->name)}
    };
    if(!Drop_statisticsContext_cls) Drop_statisticsContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_statisticsContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_statisticsContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_table(tsqlParser::Drop_tableContext *ctx){
    if(!Drop_tableContext_cls) Drop_tableContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_tableContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_tableContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_database(tsqlParser::Drop_databaseContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"database", static_cast<void*>(ctx->database)}
    };
    if(!Drop_databaseContext_cls) Drop_databaseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_databaseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_databaseContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_synonym(tsqlParser::Drop_synonymContext *ctx){
    if(!Drop_synonymContext_cls) Drop_synonymContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_synonymContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_synonymContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_view(tsqlParser::Drop_viewContext *ctx){
    if(!Drop_viewContext_cls) Drop_viewContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_viewContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_viewContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_schema(tsqlParser::Drop_schemaContext *ctx){
    if(!Drop_schemaContext_cls) Drop_schemaContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_schemaContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_schemaContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_function(tsqlParser::Drop_functionContext *ctx){
    if(!Drop_functionContext_cls) Drop_functionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_functionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_functionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_type(tsqlParser::Create_typeContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"name", static_cast<void*>(ctx->name)}
    };
    if(!Create_typeContext_cls) Create_typeContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_typeContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_typeContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDrop_type(tsqlParser::Drop_typeContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"name", static_cast<void*>(ctx->name)}
    };
    if(!Drop_typeContext_cls) Drop_typeContext_cls = PyObject_GetAttrString(translator->parser_cls, "Drop_typeContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Drop_typeContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitRowset_function_limited(tsqlParser::Rowset_function_limitedContext *ctx){
    if(!Rowset_function_limitedContext_cls) Rowset_function_limitedContext_cls = PyObject_GetAttrString(translator->parser_cls, "Rowset_function_limitedContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Rowset_function_limitedContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOpenquery(tsqlParser::OpenqueryContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"linked_server", static_cast<void*>(ctx->linked_server)},
        {"query", static_cast<void*>(ctx->query)}
    };
    if(!OpenqueryContext_cls) OpenqueryContext_cls = PyObject_GetAttrString(translator->parser_cls, "OpenqueryContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, OpenqueryContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOpendatasource(tsqlParser::OpendatasourceContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"provider", static_cast<void*>(ctx->provider)},
        {"init", static_cast<void*>(ctx->init)},
        {"database", static_cast<void*>(ctx->database)},
        {"scheme", static_cast<void*>(ctx->scheme)},
        {"table", static_cast<void*>(ctx->table)}
    };
    if(!OpendatasourceContext_cls) OpendatasourceContext_cls = PyObject_GetAttrString(translator->parser_cls, "OpendatasourceContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, OpendatasourceContext_cls, labels, 5);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDeclare_statement(tsqlParser::Declare_statementContext *ctx){
    if(!Declare_statementContext_cls) Declare_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Declare_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Declare_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCursor_statement(tsqlParser::Cursor_statementContext *ctx){
    if(!Cursor_statementContext_cls) Cursor_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Cursor_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Cursor_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitExecute_statement(tsqlParser::Execute_statementContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"return_status", static_cast<void*>(ctx->return_status)}
    };
    if(!Execute_statementContext_cls) Execute_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Execute_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Execute_statementContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitExecute_statement_arg(tsqlParser::Execute_statement_argContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"parameter", static_cast<void*>(ctx->parameter)}
    };
    if(!Execute_statement_argContext_cls) Execute_statement_argContext_cls = PyObject_GetAttrString(translator->parser_cls, "Execute_statement_argContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Execute_statement_argContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitExecute_var_string(tsqlParser::Execute_var_stringContext *ctx){
    if(!Execute_var_stringContext_cls) Execute_var_stringContext_cls = PyObject_GetAttrString(translator->parser_cls, "Execute_var_stringContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Execute_var_stringContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSecurity_statement(tsqlParser::Security_statementContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"on_id", static_cast<void*>(ctx->on_id)},
        {"to_principal", static_cast<void*>(ctx->to_principal)},
        {"as_principal", static_cast<void*>(ctx->as_principal)}
    };
    if(!Security_statementContext_cls) Security_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Security_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Security_statementContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitGrant_permission(tsqlParser::Grant_permissionContext *ctx){
    if(!Grant_permissionContext_cls) Grant_permissionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Grant_permissionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Grant_permissionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSet_statement(tsqlParser::Set_statementContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"member_name", static_cast<void*>(ctx->member_name)}
    };
    if(!Set_statementContext_cls) Set_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Set_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Set_statementContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTransaction_statement(tsqlParser::Transaction_statementContext *ctx){
    if(!Transaction_statementContext_cls) Transaction_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Transaction_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Transaction_statementContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitGo_statement(tsqlParser::Go_statementContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"count", static_cast<void*>(ctx->count)}
    };
    if(!Go_statementContext_cls) Go_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Go_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Go_statementContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitUse_statement(tsqlParser::Use_statementContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"database", static_cast<void*>(ctx->database)}
    };
    if(!Use_statementContext_cls) Use_statementContext_cls = PyObject_GetAttrString(translator->parser_cls, "Use_statementContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Use_statementContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitExecute_clause(tsqlParser::Execute_clauseContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"clause", static_cast<void*>(ctx->clause)}
    };
    if(!Execute_clauseContext_cls) Execute_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Execute_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Execute_clauseContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDeclare_local(tsqlParser::Declare_localContext *ctx){
    if(!Declare_localContext_cls) Declare_localContext_cls = PyObject_GetAttrString(translator->parser_cls, "Declare_localContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Declare_localContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_type_definition(tsqlParser::Table_type_definitionContext *ctx){
    if(!Table_type_definitionContext_cls) Table_type_definitionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_type_definitionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_type_definitionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitColumn_def_table_constraints(tsqlParser::Column_def_table_constraintsContext *ctx){
    if(!Column_def_table_constraintsContext_cls) Column_def_table_constraintsContext_cls = PyObject_GetAttrString(translator->parser_cls, "Column_def_table_constraintsContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Column_def_table_constraintsContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitColumn_def_table_constraint(tsqlParser::Column_def_table_constraintContext *ctx){
    if(!Column_def_table_constraintContext_cls) Column_def_table_constraintContext_cls = PyObject_GetAttrString(translator->parser_cls, "Column_def_table_constraintContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Column_def_table_constraintContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitColumn_definition(tsqlParser::Column_definitionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"constraint", static_cast<void*>(ctx->constraint)},
        {"seed", static_cast<void*>(ctx->seed)},
        {"increment", static_cast<void*>(ctx->increment)}
    };
    if(!Column_definitionContext_cls) Column_definitionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Column_definitionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Column_definitionContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitColumn_constraint(tsqlParser::Column_constraintContext *ctx){
    if(!Column_constraintContext_cls) Column_constraintContext_cls = PyObject_GetAttrString(translator->parser_cls, "Column_constraintContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Column_constraintContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_constraint(tsqlParser::Table_constraintContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"fk", static_cast<void*>(ctx->fk)},
        {"pk", static_cast<void*>(ctx->pk)}
    };
    if(!Table_constraintContext_cls) Table_constraintContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_constraintContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_constraintContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitIndex_options(tsqlParser::Index_optionsContext *ctx){
    if(!Index_optionsContext_cls) Index_optionsContext_cls = PyObject_GetAttrString(translator->parser_cls, "Index_optionsContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Index_optionsContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitIndex_option(tsqlParser::Index_optionContext *ctx){
    if(!Index_optionContext_cls) Index_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Index_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Index_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDeclare_cursor(tsqlParser::Declare_cursorContext *ctx){
    if(!Declare_cursorContext_cls) Declare_cursorContext_cls = PyObject_GetAttrString(translator->parser_cls, "Declare_cursorContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Declare_cursorContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDeclare_set_cursor_common(tsqlParser::Declare_set_cursor_commonContext *ctx){
    if(!Declare_set_cursor_commonContext_cls) Declare_set_cursor_commonContext_cls = PyObject_GetAttrString(translator->parser_cls, "Declare_set_cursor_commonContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Declare_set_cursor_commonContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFetch_cursor(tsqlParser::Fetch_cursorContext *ctx){
    if(!Fetch_cursorContext_cls) Fetch_cursorContext_cls = PyObject_GetAttrString(translator->parser_cls, "Fetch_cursorContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Fetch_cursorContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSet_special(tsqlParser::Set_specialContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"key", static_cast<void*>(ctx->key)},
        {"value", static_cast<void*>(ctx->value)},
        {"set_type", static_cast<void*>(ctx->set_type)}
    };
    if(!Set_specialContext_cls) Set_specialContext_cls = PyObject_GetAttrString(translator->parser_cls, "Set_specialContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Set_specialContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitConstant_LOCAL_ID(tsqlParser::Constant_LOCAL_IDContext *ctx){
    if(!Constant_LOCAL_IDContext_cls) Constant_LOCAL_IDContext_cls = PyObject_GetAttrString(translator->parser_cls, "Constant_LOCAL_IDContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Constant_LOCAL_IDContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBinary_operator_expression(tsqlParser::Binary_operator_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Binary_operator_expressionContext_cls) Binary_operator_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Binary_operator_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Binary_operator_expressionContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitUnary_operator_expression(tsqlParser::Unary_operator_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"op", static_cast<void*>(ctx->op)}
    };
    if(!Unary_operator_expressionContext_cls) Unary_operator_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Unary_operator_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Unary_operator_expressionContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFunction_call_expression(tsqlParser::Function_call_expressionContext *ctx){
    if(!Function_call_expressionContext_cls) Function_call_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Function_call_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Function_call_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitConversion_expression(tsqlParser::Conversion_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Conversion_expressionContext_cls) Conversion_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Conversion_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Conversion_expressionContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCase_expression(tsqlParser::Case_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"caseExpr", static_cast<void*>(ctx->caseExpr)},
        {"elseExpr", static_cast<void*>(ctx->elseExpr)}
    };
    if(!Case_expressionContext_cls) Case_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Case_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Case_expressionContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitColumn_ref_expression(tsqlParser::Column_ref_expressionContext *ctx){
    if(!Column_ref_expressionContext_cls) Column_ref_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Column_ref_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Column_ref_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitString_agg_expression(tsqlParser::String_agg_expressionContext *ctx){
    if(!String_agg_expressionContext_cls) String_agg_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "String_agg_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, String_agg_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitPercentile_cont_expression(tsqlParser::Percentile_cont_expressionContext *ctx){
    if(!Percentile_cont_expressionContext_cls) Percentile_cont_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Percentile_cont_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Percentile_cont_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitPrimitive_expression(tsqlParser::Primitive_expressionContext *ctx){
    if(!Primitive_expressionContext_cls) Primitive_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Primitive_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Primitive_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBracket_expression(tsqlParser::Bracket_expressionContext *ctx){
    if(!Bracket_expressionContext_cls) Bracket_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Bracket_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Bracket_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSubquery_expression(tsqlParser::Subquery_expressionContext *ctx){
    if(!Subquery_expressionContext_cls) Subquery_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Subquery_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Subquery_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOver_clause_expression(tsqlParser::Over_clause_expressionContext *ctx){
    if(!Over_clause_expressionContext_cls) Over_clause_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Over_clause_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Over_clause_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitXml_method_expression(tsqlParser::Xml_method_expressionContext *ctx){
    if(!Xml_method_expressionContext_cls) Xml_method_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Xml_method_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Xml_method_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitXml_method_call(tsqlParser::Xml_method_callContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"table", static_cast<void*>(ctx->table)},
        {"column", static_cast<void*>(ctx->column)}
    };
    if(!Xml_method_callContext_cls) Xml_method_callContext_cls = PyObject_GetAttrString(translator->parser_cls, "Xml_method_callContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Xml_method_callContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSimple_xml_method_name(tsqlParser::Simple_xml_method_nameContext *ctx){
    if(!Simple_xml_method_nameContext_cls) Simple_xml_method_nameContext_cls = PyObject_GetAttrString(translator->parser_cls, "Simple_xml_method_nameContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Simple_xml_method_nameContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitConstant_expression(tsqlParser::Constant_expressionContext *ctx){
    if(!Constant_expressionContext_cls) Constant_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Constant_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Constant_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSubquery(tsqlParser::SubqueryContext *ctx){
    if(!SubqueryContext_cls) SubqueryContext_cls = PyObject_GetAttrString(translator->parser_cls, "SubqueryContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, SubqueryContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitWith_expression(tsqlParser::With_expressionContext *ctx){
    if(!With_expressionContext_cls) With_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "With_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, With_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCommon_table_expression(tsqlParser::Common_table_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"expression_name", static_cast<void*>(ctx->expression_name)}
    };
    if(!Common_table_expressionContext_cls) Common_table_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Common_table_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Common_table_expressionContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitUpdate_elem(tsqlParser::Update_elemContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"name", static_cast<void*>(ctx->name)},
        {"udt_column_name", static_cast<void*>(ctx->udt_column_name)},
        {"method_name", static_cast<void*>(ctx->method_name)}
    };
    if(!Update_elemContext_cls) Update_elemContext_cls = PyObject_GetAttrString(translator->parser_cls, "Update_elemContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Update_elemContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSearch_condition_list(tsqlParser::Search_condition_listContext *ctx){
    if(!Search_condition_listContext_cls) Search_condition_listContext_cls = PyObject_GetAttrString(translator->parser_cls, "Search_condition_listContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Search_condition_listContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSearch_cond_or(tsqlParser::Search_cond_orContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Search_cond_orContext_cls) Search_cond_orContext_cls = PyObject_GetAttrString(translator->parser_cls, "Search_cond_orContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Search_cond_orContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSearch_cond_pred(tsqlParser::Search_cond_predContext *ctx){
    if(!Search_cond_predContext_cls) Search_cond_predContext_cls = PyObject_GetAttrString(translator->parser_cls, "Search_cond_predContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Search_cond_predContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSearch_cond_and(tsqlParser::Search_cond_andContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Search_cond_andContext_cls) Search_cond_andContext_cls = PyObject_GetAttrString(translator->parser_cls, "Search_cond_andContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Search_cond_andContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBinary_in_expression(tsqlParser::Binary_in_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)}
    };
    if(!Binary_in_expressionContext_cls) Binary_in_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Binary_in_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Binary_in_expressionContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitUnary_operator_expression2(tsqlParser::Unary_operator_expression2Context *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"op", static_cast<void*>(ctx->op)},
        {"expr", static_cast<void*>(ctx->expr)}
    };
    if(!Unary_operator_expression2Context_cls) Unary_operator_expression2Context_cls = PyObject_GetAttrString(translator->parser_cls, "Unary_operator_expression2Context");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Unary_operator_expression2Context_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBinary_mod_expression(tsqlParser::Binary_mod_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)},
        {"right_1", static_cast<void*>(ctx->right_1)},
        {"right_2", static_cast<void*>(ctx->right_2)}
    };
    if(!Binary_mod_expressionContext_cls) Binary_mod_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Binary_mod_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Binary_mod_expressionContext_cls, labels, 4);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitUnary_operator_expression3(tsqlParser::Unary_operator_expression3Context *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"op", static_cast<void*>(ctx->op)},
        {"expr", static_cast<void*>(ctx->expr)}
    };
    if(!Unary_operator_expression3Context_cls) Unary_operator_expression3Context_cls = PyObject_GetAttrString(translator->parser_cls, "Unary_operator_expression3Context");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Unary_operator_expression3Context_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBracket_search_expression(tsqlParser::Bracket_search_expressionContext *ctx){
    if(!Bracket_search_expressionContext_cls) Bracket_search_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Bracket_search_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Bracket_search_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSublink_expression(tsqlParser::Sublink_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"test_expr", static_cast<void*>(ctx->test_expr)},
        {"op", static_cast<void*>(ctx->op)},
        {"pref", static_cast<void*>(ctx->pref)}
    };
    if(!Sublink_expressionContext_cls) Sublink_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Sublink_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Sublink_expressionContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBinary_operator_expression3(tsqlParser::Binary_operator_expression3Context *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Binary_operator_expression3Context_cls) Binary_operator_expression3Context_cls = PyObject_GetAttrString(translator->parser_cls, "Binary_operator_expression3Context");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Binary_operator_expression3Context_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBinary_operator_expression2(tsqlParser::Binary_operator_expression2Context *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Binary_operator_expression2Context_cls) Binary_operator_expression2Context_cls = PyObject_GetAttrString(translator->parser_cls, "Binary_operator_expression2Context");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Binary_operator_expression2Context_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDecimal_expression(tsqlParser::Decimal_expressionContext *ctx){
    if(!Decimal_expressionContext_cls) Decimal_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Decimal_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Decimal_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBracket_query_expression(tsqlParser::Bracket_query_expressionContext *ctx){
    if(!Bracket_query_expressionContext_cls) Bracket_query_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Bracket_query_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Bracket_query_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitQuery_specification_expression(tsqlParser::Query_specification_expressionContext *ctx){
    if(!Query_specification_expressionContext_cls) Query_specification_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Query_specification_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Query_specification_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitUnion_query_expression(tsqlParser::Union_query_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Union_query_expressionContext_cls) Union_query_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Union_query_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Union_query_expressionContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitUnion_op(tsqlParser::Union_opContext *ctx){
    if(!Union_opContext_cls) Union_opContext_cls = PyObject_GetAttrString(translator->parser_cls, "Union_opContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Union_opContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCross_apply_expression(tsqlParser::Cross_apply_expressionContext *ctx){
    if(!Cross_apply_expressionContext_cls) Cross_apply_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Cross_apply_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Cross_apply_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitQuery_specification(tsqlParser::Query_specificationContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"pref", static_cast<void*>(ctx->pref)},
        {"where", static_cast<void*>(ctx->where)},
        {"having", static_cast<void*>(ctx->having)}
    };
    if(!Query_specificationContext_cls) Query_specificationContext_cls = PyObject_GetAttrString(translator->parser_cls, "Query_specificationContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Query_specificationContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitGroup_by_grouping_sets(tsqlParser::Group_by_grouping_setsContext *ctx){
    if(!Group_by_grouping_setsContext_cls) Group_by_grouping_setsContext_cls = PyObject_GetAttrString(translator->parser_cls, "Group_by_grouping_setsContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Group_by_grouping_setsContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitGrouping_set(tsqlParser::Grouping_setContext *ctx){
    if(!Grouping_setContext_cls) Grouping_setContext_cls = PyObject_GetAttrString(translator->parser_cls, "Grouping_setContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Grouping_setContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTop_clause(tsqlParser::Top_clauseContext *ctx){
    if(!Top_clauseContext_cls) Top_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Top_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Top_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTop_clause_dm(tsqlParser::Top_clause_dmContext *ctx){
    if(!Top_clause_dmContext_cls) Top_clause_dmContext_cls = PyObject_GetAttrString(translator->parser_cls, "Top_clause_dmContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Top_clause_dmContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOrder_by_clause(tsqlParser::Order_by_clauseContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"offset", static_cast<void*>(ctx->offset)}
    };
    if(!Order_by_clauseContext_cls) Order_by_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Order_by_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Order_by_clauseContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFetch_expression(tsqlParser::Fetch_expressionContext *ctx){
    if(!Fetch_expressionContext_cls) Fetch_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Fetch_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Fetch_expressionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFor_clause(tsqlParser::For_clauseContext *ctx){
    if(!For_clauseContext_cls) For_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "For_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, For_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitXml_common_directives(tsqlParser::Xml_common_directivesContext *ctx){
    if(!Xml_common_directivesContext_cls) Xml_common_directivesContext_cls = PyObject_GetAttrString(translator->parser_cls, "Xml_common_directivesContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Xml_common_directivesContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOrder_by_expression(tsqlParser::Order_by_expressionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"direction", static_cast<void*>(ctx->direction)}
    };
    if(!Order_by_expressionContext_cls) Order_by_expressionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Order_by_expressionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Order_by_expressionContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitGroup_by_item(tsqlParser::Group_by_itemContext *ctx){
    if(!Group_by_itemContext_cls) Group_by_itemContext_cls = PyObject_GetAttrString(translator->parser_cls, "Group_by_itemContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Group_by_itemContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOption_clause(tsqlParser::Option_clauseContext *ctx){
    if(!Option_clauseContext_cls) Option_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Option_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Option_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOption(tsqlParser::OptionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"number_rows", static_cast<void*>(ctx->number_rows)},
        {"number_of_processors", static_cast<void*>(ctx->number_of_processors)},
        {"number_recursion", static_cast<void*>(ctx->number_recursion)}
    };
    if(!OptionContext_cls) OptionContext_cls = PyObject_GetAttrString(translator->parser_cls, "OptionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, OptionContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOptimize_for_arg(tsqlParser::Optimize_for_argContext *ctx){
    if(!Optimize_for_argContext_cls) Optimize_for_argContext_cls = PyObject_GetAttrString(translator->parser_cls, "Optimize_for_argContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Optimize_for_argContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSelect_list(tsqlParser::Select_listContext *ctx){
    if(!Select_listContext_cls) Select_listContext_cls = PyObject_GetAttrString(translator->parser_cls, "Select_listContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Select_listContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSelect_list_elem(tsqlParser::Select_list_elemContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"alias", static_cast<void*>(ctx->alias)}
    };
    if(!Select_list_elemContext_cls) Select_list_elemContext_cls = PyObject_GetAttrString(translator->parser_cls, "Select_list_elemContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Select_list_elemContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_sources(tsqlParser::Table_sourcesContext *ctx){
    if(!Table_sourcesContext_cls) Table_sourcesContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_sourcesContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_sourcesContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCross_join(tsqlParser::Cross_joinContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Cross_joinContext_cls) Cross_joinContext_cls = PyObject_GetAttrString(translator->parser_cls, "Cross_joinContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Cross_joinContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_source_item_join(tsqlParser::Table_source_item_joinContext *ctx){
    if(!Table_source_item_joinContext_cls) Table_source_item_joinContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_source_item_joinContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_source_item_joinContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitStandard_join(tsqlParser::Standard_joinContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Standard_joinContext_cls) Standard_joinContext_cls = PyObject_GetAttrString(translator->parser_cls, "Standard_joinContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Standard_joinContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitApply_join(tsqlParser::Apply_joinContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"op", static_cast<void*>(ctx->op)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Apply_joinContext_cls) Apply_joinContext_cls = PyObject_GetAttrString(translator->parser_cls, "Apply_joinContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Apply_joinContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBracket_table_source(tsqlParser::Bracket_table_sourceContext *ctx){
    if(!Bracket_table_sourceContext_cls) Bracket_table_sourceContext_cls = PyObject_GetAttrString(translator->parser_cls, "Bracket_table_sourceContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Bracket_table_sourceContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_source_item_simple(tsqlParser::Table_source_item_simpleContext *ctx){
    if(!Table_source_item_simpleContext_cls) Table_source_item_simpleContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_source_item_simpleContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_source_item_simpleContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_source_item_complex(tsqlParser::Table_source_item_complexContext *ctx){
    if(!Table_source_item_complexContext_cls) Table_source_item_complexContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_source_item_complexContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_source_item_complexContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_source_item_name(tsqlParser::Table_source_item_nameContext *ctx){
    if(!Table_source_item_nameContext_cls) Table_source_item_nameContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_source_item_nameContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_source_item_nameContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTablesample_clause(tsqlParser::Tablesample_clauseContext *ctx){
    if(!Tablesample_clauseContext_cls) Tablesample_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Tablesample_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Tablesample_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSample_number(tsqlParser::Sample_numberContext *ctx){
    if(!Sample_numberContext_cls) Sample_numberContext_cls = PyObject_GetAttrString(translator->parser_cls, "Sample_numberContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Sample_numberContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitRepeat_seed(tsqlParser::Repeat_seedContext *ctx){
    if(!Repeat_seedContext_cls) Repeat_seedContext_cls = PyObject_GetAttrString(translator->parser_cls, "Repeat_seedContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Repeat_seedContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_alias(tsqlParser::Table_aliasContext *ctx){
    if(!Table_aliasContext_cls) Table_aliasContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_aliasContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_aliasContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitChange_table(tsqlParser::Change_tableContext *ctx){
    if(!Change_tableContext_cls) Change_tableContext_cls = PyObject_GetAttrString(translator->parser_cls, "Change_tableContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Change_tableContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitJoin_type(tsqlParser::Join_typeContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"join_hint", static_cast<void*>(ctx->join_hint)}
    };
    if(!Join_typeContext_cls) Join_typeContext_cls = PyObject_GetAttrString(translator->parser_cls, "Join_typeContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Join_typeContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_name_with_hint(tsqlParser::Table_name_with_hintContext *ctx){
    if(!Table_name_with_hintContext_cls) Table_name_with_hintContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_name_with_hintContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_name_with_hintContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitRowset_function(tsqlParser::Rowset_functionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"provider_name", static_cast<void*>(ctx->provider_name)},
        {"connectionString", static_cast<void*>(ctx->connectionString)},
        {"sql", static_cast<void*>(ctx->sql)},
        {"data_file", static_cast<void*>(ctx->data_file)}
    };
    if(!Rowset_functionContext_cls) Rowset_functionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Rowset_functionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Rowset_functionContext_cls, labels, 4);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitBulk_option(tsqlParser::Bulk_optionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"bulk_option_value", static_cast<void*>(ctx->bulk_option_value)}
    };
    if(!Bulk_optionContext_cls) Bulk_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Bulk_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Bulk_optionContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDerived_table(tsqlParser::Derived_tableContext *ctx){
    if(!Derived_tableContext_cls) Derived_tableContext_cls = PyObject_GetAttrString(translator->parser_cls, "Derived_tableContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Derived_tableContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitStandard_call(tsqlParser::Standard_callContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"style", static_cast<void*>(ctx->style)},
        {"seed", static_cast<void*>(ctx->seed)},
        {"increment", static_cast<void*>(ctx->increment)}
    };
    if(!Standard_callContext_cls) Standard_callContext_cls = PyObject_GetAttrString(translator->parser_cls, "Standard_callContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Standard_callContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitAggregate_call(tsqlParser::Aggregate_callContext *ctx){
    if(!Aggregate_callContext_cls) Aggregate_callContext_cls = PyObject_GetAttrString(translator->parser_cls, "Aggregate_callContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Aggregate_callContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitNvf_call(tsqlParser::Nvf_callContext *ctx){
    if(!Nvf_callContext_cls) Nvf_callContext_cls = PyObject_GetAttrString(translator->parser_cls, "Nvf_callContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Nvf_callContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitRank_call(tsqlParser::Rank_callContext *ctx){
    if(!Rank_callContext_cls) Rank_callContext_cls = PyObject_GetAttrString(translator->parser_cls, "Rank_callContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Rank_callContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitExpression_call(tsqlParser::Expression_callContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"left", static_cast<void*>(ctx->left)},
        {"alias", static_cast<void*>(ctx->alias)},
        {"right", static_cast<void*>(ctx->right)}
    };
    if(!Expression_callContext_cls) Expression_callContext_cls = PyObject_GetAttrString(translator->parser_cls, "Expression_callContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Expression_callContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSimple_call(tsqlParser::Simple_callContext *ctx){
    if(!Simple_callContext_cls) Simple_callContext_cls = PyObject_GetAttrString(translator->parser_cls, "Simple_callContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Simple_callContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCast_call(tsqlParser::Cast_callContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"alias", static_cast<void*>(ctx->alias)}
    };
    if(!Cast_callContext_cls) Cast_callContext_cls = PyObject_GetAttrString(translator->parser_cls, "Cast_callContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Cast_callContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSwitch_section(tsqlParser::Switch_sectionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"whenExpr", static_cast<void*>(ctx->whenExpr)},
        {"thenExpr", static_cast<void*>(ctx->thenExpr)}
    };
    if(!Switch_sectionContext_cls) Switch_sectionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Switch_sectionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Switch_sectionContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSwitch_search_condition_section(tsqlParser::Switch_search_condition_sectionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"whenExpr", static_cast<void*>(ctx->whenExpr)},
        {"thenExpr", static_cast<void*>(ctx->thenExpr)}
    };
    if(!Switch_search_condition_sectionContext_cls) Switch_search_condition_sectionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Switch_search_condition_sectionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Switch_search_condition_sectionContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitWith_table_hints(tsqlParser::With_table_hintsContext *ctx){
    if(!With_table_hintsContext_cls) With_table_hintsContext_cls = PyObject_GetAttrString(translator->parser_cls, "With_table_hintsContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, With_table_hintsContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitInsert_with_table_hints(tsqlParser::Insert_with_table_hintsContext *ctx){
    if(!Insert_with_table_hintsContext_cls) Insert_with_table_hintsContext_cls = PyObject_GetAttrString(translator->parser_cls, "Insert_with_table_hintsContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Insert_with_table_hintsContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_hint(tsqlParser::Table_hintContext *ctx){
    if(!Table_hintContext_cls) Table_hintContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_hintContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_hintContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitIndex_value(tsqlParser::Index_valueContext *ctx){
    if(!Index_valueContext_cls) Index_valueContext_cls = PyObject_GetAttrString(translator->parser_cls, "Index_valueContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Index_valueContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitColumn_alias_list(tsqlParser::Column_alias_listContext *ctx){
    if(!Column_alias_listContext_cls) Column_alias_listContext_cls = PyObject_GetAttrString(translator->parser_cls, "Column_alias_listContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Column_alias_listContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitColumn_alias(tsqlParser::Column_aliasContext *ctx){
    if(!Column_aliasContext_cls) Column_aliasContext_cls = PyObject_GetAttrString(translator->parser_cls, "Column_aliasContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Column_aliasContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitA_star(tsqlParser::A_starContext *ctx){
    if(!A_starContext_cls) A_starContext_cls = PyObject_GetAttrString(translator->parser_cls, "A_starContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, A_starContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitTable_value_constructor(tsqlParser::Table_value_constructorContext *ctx){
    if(!Table_value_constructorContext_cls) Table_value_constructorContext_cls = PyObject_GetAttrString(translator->parser_cls, "Table_value_constructorContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Table_value_constructorContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitExpression_list(tsqlParser::Expression_listContext *ctx){
    if(!Expression_listContext_cls) Expression_listContext_cls = PyObject_GetAttrString(translator->parser_cls, "Expression_listContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Expression_listContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitValue_list(tsqlParser::Value_listContext *ctx){
    if(!Value_listContext_cls) Value_listContext_cls = PyObject_GetAttrString(translator->parser_cls, "Value_listContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Value_listContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitNext_value_for(tsqlParser::Next_value_forContext *ctx){
    if(!Next_value_forContext_cls) Next_value_forContext_cls = PyObject_GetAttrString(translator->parser_cls, "Next_value_forContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Next_value_forContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitNext_value_for_function(tsqlParser::Next_value_for_functionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"args", static_cast<void*>(ctx->args)}
    };
    if(!Next_value_for_functionContext_cls) Next_value_for_functionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Next_value_for_functionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Next_value_for_functionContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitRanking_windowed_function(tsqlParser::Ranking_windowed_functionContext *ctx){
    if(!Ranking_windowed_functionContext_cls) Ranking_windowed_functionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Ranking_windowed_functionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Ranking_windowed_functionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitAggregate_windowed_function(tsqlParser::Aggregate_windowed_functionContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"args", static_cast<void*>(ctx->args)}
    };
    if(!Aggregate_windowed_functionContext_cls) Aggregate_windowed_functionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Aggregate_windowed_functionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Aggregate_windowed_functionContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitAll_distinct(tsqlParser::All_distinctContext *ctx){
    if(!All_distinctContext_cls) All_distinctContext_cls = PyObject_GetAttrString(translator->parser_cls, "All_distinctContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, All_distinctContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOver_clause(tsqlParser::Over_clauseContext *ctx){
    if(!Over_clauseContext_cls) Over_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Over_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Over_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitRow_or_range_clause(tsqlParser::Row_or_range_clauseContext *ctx){
    if(!Row_or_range_clauseContext_cls) Row_or_range_clauseContext_cls = PyObject_GetAttrString(translator->parser_cls, "Row_or_range_clauseContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Row_or_range_clauseContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitWindow_frame_extent(tsqlParser::Window_frame_extentContext *ctx){
    if(!Window_frame_extentContext_cls) Window_frame_extentContext_cls = PyObject_GetAttrString(translator->parser_cls, "Window_frame_extentContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Window_frame_extentContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitWindow_frame_bound(tsqlParser::Window_frame_boundContext *ctx){
    if(!Window_frame_boundContext_cls) Window_frame_boundContext_cls = PyObject_GetAttrString(translator->parser_cls, "Window_frame_boundContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Window_frame_boundContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitWindow_frame_preceding(tsqlParser::Window_frame_precedingContext *ctx){
    if(!Window_frame_precedingContext_cls) Window_frame_precedingContext_cls = PyObject_GetAttrString(translator->parser_cls, "Window_frame_precedingContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Window_frame_precedingContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitWindow_frame_following(tsqlParser::Window_frame_followingContext *ctx){
    if(!Window_frame_followingContext_cls) Window_frame_followingContext_cls = PyObject_GetAttrString(translator->parser_cls, "Window_frame_followingContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Window_frame_followingContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_database_option(tsqlParser::Create_database_optionContext *ctx){
    if(!Create_database_optionContext_cls) Create_database_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_database_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_database_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDatabase_filestream_option(tsqlParser::Database_filestream_optionContext *ctx){
    if(!Database_filestream_optionContext_cls) Database_filestream_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Database_filestream_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Database_filestream_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDatabase_file_spec(tsqlParser::Database_file_specContext *ctx){
    if(!Database_file_specContext_cls) Database_file_specContext_cls = PyObject_GetAttrString(translator->parser_cls, "Database_file_specContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Database_file_specContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFile_group(tsqlParser::File_groupContext *ctx){
    if(!File_groupContext_cls) File_groupContext_cls = PyObject_GetAttrString(translator->parser_cls, "File_groupContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, File_groupContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFile_spec(tsqlParser::File_specContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"r_file", static_cast<void*>(ctx->r_file)}
    };
    if(!File_specContext_cls) File_specContext_cls = PyObject_GetAttrString(translator->parser_cls, "File_specContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, File_specContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFull_table_name(tsqlParser::Full_table_nameContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"server", static_cast<void*>(ctx->server)},
        {"database", static_cast<void*>(ctx->database)},
        {"schema", static_cast<void*>(ctx->schema)},
        {"table", static_cast<void*>(ctx->table)}
    };
    if(!Full_table_nameContext_cls) Full_table_nameContext_cls = PyObject_GetAttrString(translator->parser_cls, "Full_table_nameContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Full_table_nameContext_cls, labels, 4);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSimple_name(tsqlParser::Simple_nameContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"schema", static_cast<void*>(ctx->schema)},
        {"name", static_cast<void*>(ctx->name)}
    };
    if(!Simple_nameContext_cls) Simple_nameContext_cls = PyObject_GetAttrString(translator->parser_cls, "Simple_nameContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Simple_nameContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFunc_proc_name(tsqlParser::Func_proc_nameContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"database", static_cast<void*>(ctx->database)},
        {"schema", static_cast<void*>(ctx->schema)},
        {"procedure", static_cast<void*>(ctx->procedure)}
    };
    if(!Func_proc_nameContext_cls) Func_proc_nameContext_cls = PyObject_GetAttrString(translator->parser_cls, "Func_proc_nameContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Func_proc_nameContext_cls, labels, 3);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDdl_object(tsqlParser::Ddl_objectContext *ctx){
    if(!Ddl_objectContext_cls) Ddl_objectContext_cls = PyObject_GetAttrString(translator->parser_cls, "Ddl_objectContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Ddl_objectContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFull_column_name(tsqlParser::Full_column_nameContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"table", static_cast<void*>(ctx->table)},
        {"name", static_cast<void*>(ctx->name)}
    };
    if(!Full_column_nameContext_cls) Full_column_nameContext_cls = PyObject_GetAttrString(translator->parser_cls, "Full_column_nameContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Full_column_nameContext_cls, labels, 2);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitColumn_name_list(tsqlParser::Column_name_listContext *ctx){
    if(!Column_name_listContext_cls) Column_name_listContext_cls = PyObject_GetAttrString(translator->parser_cls, "Column_name_listContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Column_name_listContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCursor_name(tsqlParser::Cursor_nameContext *ctx){
    if(!Cursor_nameContext_cls) Cursor_nameContext_cls = PyObject_GetAttrString(translator->parser_cls, "Cursor_nameContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Cursor_nameContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitOn_off(tsqlParser::On_offContext *ctx){
    if(!On_offContext_cls) On_offContext_cls = PyObject_GetAttrString(translator->parser_cls, "On_offContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, On_offContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitClustered(tsqlParser::ClusteredContext *ctx){
    if(!ClusteredContext_cls) ClusteredContext_cls = PyObject_GetAttrString(translator->parser_cls, "ClusteredContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, ClusteredContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitNull_notnull(tsqlParser::Null_notnullContext *ctx){
    if(!Null_notnullContext_cls) Null_notnullContext_cls = PyObject_GetAttrString(translator->parser_cls, "Null_notnullContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Null_notnullContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitScalar_function_name(tsqlParser::Scalar_function_nameContext *ctx){
    if(!Scalar_function_nameContext_cls) Scalar_function_nameContext_cls = PyObject_GetAttrString(translator->parser_cls, "Scalar_function_nameContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Scalar_function_nameContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitDefault_value(tsqlParser::Default_valueContext *ctx){
    if(!Default_valueContext_cls) Default_valueContext_cls = PyObject_GetAttrString(translator->parser_cls, "Default_valueContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Default_valueContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitConstant(tsqlParser::ConstantContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"dollar", static_cast<void*>(ctx->dollar)}
    };
    if(!ConstantContext_cls) ConstantContext_cls = PyObject_GetAttrString(translator->parser_cls, "ConstantContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, ConstantContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSign(tsqlParser::SignContext *ctx){
    if(!SignContext_cls) SignContext_cls = PyObject_GetAttrString(translator->parser_cls, "SignContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, SignContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitR_id(tsqlParser::R_idContext *ctx){
    if(!R_idContext_cls) R_idContext_cls = PyObject_GetAttrString(translator->parser_cls, "R_idContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, R_idContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitSimple_id(tsqlParser::Simple_idContext *ctx){
    if(!Simple_idContext_cls) Simple_idContext_cls = PyObject_GetAttrString(translator->parser_cls, "Simple_idContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Simple_idContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitComparison_operator(tsqlParser::Comparison_operatorContext *ctx){
    if(!Comparison_operatorContext_cls) Comparison_operatorContext_cls = PyObject_GetAttrString(translator->parser_cls, "Comparison_operatorContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Comparison_operatorContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitAssignment_operator(tsqlParser::Assignment_operatorContext *ctx){
    if(!Assignment_operatorContext_cls) Assignment_operatorContext_cls = PyObject_GetAttrString(translator->parser_cls, "Assignment_operatorContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Assignment_operatorContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFile_size(tsqlParser::File_sizeContext *ctx){
    if(!File_sizeContext_cls) File_sizeContext_cls = PyObject_GetAttrString(translator->parser_cls, "File_sizeContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, File_sizeContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_or_alter_procedure(tsqlParser::Create_or_alter_procedureContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"proc", static_cast<void*>(ctx->proc)}
    };
    if(!Create_or_alter_procedureContext_cls) Create_or_alter_procedureContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_or_alter_procedureContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_or_alter_procedureContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitCreate_or_alter_function(tsqlParser::Create_or_alter_functionContext *ctx){
    if(!Create_or_alter_functionContext_cls) Create_or_alter_functionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Create_or_alter_functionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Create_or_alter_functionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFunc_body_returns_select(tsqlParser::Func_body_returns_selectContext *ctx){
    if(!Func_body_returns_selectContext_cls) Func_body_returns_selectContext_cls = PyObject_GetAttrString(translator->parser_cls, "Func_body_returns_selectContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Func_body_returns_selectContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFunc_body_returns_table(tsqlParser::Func_body_returns_tableContext *ctx){
    if(!Func_body_returns_tableContext_cls) Func_body_returns_tableContext_cls = PyObject_GetAttrString(translator->parser_cls, "Func_body_returns_tableContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Func_body_returns_tableContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFunc_body_returns_scalar(tsqlParser::Func_body_returns_scalarContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"ret", static_cast<void*>(ctx->ret)}
    };
    if(!Func_body_returns_scalarContext_cls) Func_body_returns_scalarContext_cls = PyObject_GetAttrString(translator->parser_cls, "Func_body_returns_scalarContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Func_body_returns_scalarContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitProcedure_param(tsqlParser::Procedure_paramContext *ctx){
    speedy_antlr::LabelMap labels[] = {
        {"default_val", static_cast<void*>(ctx->default_val)}
    };
    if(!Procedure_paramContext_cls) Procedure_paramContext_cls = PyObject_GetAttrString(translator->parser_cls, "Procedure_paramContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Procedure_paramContext_cls, labels, 1);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitProcedure_option(tsqlParser::Procedure_optionContext *ctx){
    if(!Procedure_optionContext_cls) Procedure_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Procedure_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Procedure_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitFunction_option(tsqlParser::Function_optionContext *ctx){
    if(!Function_optionContext_cls) Function_optionContext_cls = PyObject_GetAttrString(translator->parser_cls, "Function_optionContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Function_optionContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitPercentile_cont(tsqlParser::Percentile_contContext *ctx){
    if(!Percentile_contContext_cls) Percentile_contContext_cls = PyObject_GetAttrString(translator->parser_cls, "Percentile_contContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Percentile_contContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitString_agg(tsqlParser::String_aggContext *ctx){
    if(!String_aggContext_cls) String_aggContext_cls = PyObject_GetAttrString(translator->parser_cls, "String_aggContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, String_aggContext_cls);
    return py_ctx;
}

antlrcpp::Any SA_tsqlTranslator::visitData_type(tsqlParser::Data_typeContext *ctx){
    if(!Data_typeContext_cls) Data_typeContext_cls = PyObject_GetAttrString(translator->parser_cls, "Data_typeContext");
    PyObject *py_ctx = translator->convert_ctx(this, ctx, Data_typeContext_cls);
    return py_ctx;
}
