From ee28168a547067d44b7bd00d5cfb8645fea1eeef Mon Sep 17 00:00:00 2001 From: Matts966 Date: Thu, 14 Apr 2022 01:11:46 +0900 Subject: [PATCH 1/2] Support TVF --- .github/workflows/test.yml | 4 ++-- alphasql/BUILD | 1 + alphasql/alphacheck.cc | 28 +++++++++++++++++++++++++++- alphasql/identifier_resolver.cc | 12 ++++++------ alphasql/identifier_resolver.h | 1 + samples/tvf/call_tvf.sql | 5 +++++ samples/tvf/define_tvf.sql | 13 +++++++++++++ 7 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 samples/tvf/call_tvf.sql create mode 100644 samples/tvf/define_tvf.sql diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b909b70d..02d3df5b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -79,9 +79,9 @@ jobs: with: commit-message: Update Snapshot reviewers: Matts966 - branch: snapshot-testing-${{ steps.extract_branch.outputs.branch }} + branch: snapshot-${{ steps.extract_branch.outputs.branch }} delete-branch: true title: 'Updated Snapshot :tada:' body: | Updated Snapshot :tada: - Auto-generated by [create-pull-request][https://github.com/peter-evans/create-pull-request] + Auto-generated by [create-pull-request](https://github.com/peter-evans/create-pull-request) diff --git a/alphasql/BUILD b/alphasql/BUILD index 6443d14c..f12ef3f9 100644 --- a/alphasql/BUILD +++ b/alphasql/BUILD @@ -99,6 +99,7 @@ cc_binary( "@com_google_zetasql//zetasql/public:evaluator_table_iterator", "@com_google_zetasql//zetasql/public:language_options", "@com_google_zetasql//zetasql/public:simple_catalog", + "@com_google_zetasql//zetasql/public:templated_sql_tvf", "@com_google_zetasql//zetasql/public:type", "@com_google_zetasql//zetasql/public:type_cc_proto", "@com_google_zetasql//zetasql/public:value", diff --git a/alphasql/alphacheck.cc b/alphasql/alphacheck.cc index ed58544a..f89cee8d 100644 --- a/alphasql/alphacheck.cc +++ b/alphasql/alphacheck.cc @@ -43,6 +43,7 @@ #include "zetasql/public/type.h" #include "zetasql/public/value.h" #include "zetasql/public/templated_sql_function.h" +#include "zetasql/public/templated_sql_tvf.h" #include "zetasql/resolved_ast/resolved_ast.h" #include "alphasql/common_lib.h" @@ -216,6 +217,19 @@ absl::Status check(const std::string &sql, const ASTStatement *statement, } break; } + case RESOLVED_CREATE_TABLE_FUNCTION_STMT: { + auto *create_table_function_stmt = + resolved_statement->GetAs(); + std::cout + << "Create Table Function Statement analyzed, adding function to catalog..." + << std::endl; + catalog->AddOwnedTableValuedFunction(new TemplatedSQLTVF( + create_table_function_stmt->name_path(), + create_table_function_stmt->signature(), + create_table_function_stmt->argument_name_list(), + ParseResumeLocation::FromString(create_table_function_stmt->code()))); + break; + } // TODO: DROP PROCEDURE Support? case RESOLVED_CREATE_PROCEDURE_STMT: { auto *create_procedure_stmt = @@ -484,13 +498,25 @@ int main(int argc, char *argv[]) { status = zetasql::UpdateErrorLocationPayloadWithFilenameIfNotPresent( status, sql_file_path); std::cerr << "ERROR: " << status << std::endl; - std::cout << "catalog:" << std::endl; + std::cout << "tables:" << std::endl; // For deterministic output auto table_names = catalog->table_names(); std::sort(table_names.begin(), table_names.end()); for (const std::string &table_name : table_names) { std::cout << "\t" << table_name << std::endl; } + // Too many outputs + /* auto function_names = catalog->function_names(); */ + /* std::sort(function_names.begin(), function_names.end()); */ + /* for (const std::string &function_name : function_names) { */ + /* std::cout << "\t" << function_name << std::endl; */ + /* } */ + std::cout << "tvfs:" << std::endl; + auto table_function_names = catalog->table_valued_function_names(); + std::sort(table_function_names.begin(), table_function_names.end()); + for (const std::string &table_function_name : table_function_names) { + std::cout << "\t" << table_function_name << std::endl; + } return 1; } } diff --git a/alphasql/identifier_resolver.cc b/alphasql/identifier_resolver.cc index fd92e80f..dfd4cda8 100644 --- a/alphasql/identifier_resolver.cc +++ b/alphasql/identifier_resolver.cc @@ -138,12 +138,6 @@ void IdentifierResolver::visitASTCreateTableStatement( visitASTChildren(node, data); } -// TODO:(Matts966) Check if this node is callee or caller and implement -// correctly void IdentifierResolver::visitASTTVF(const ASTTVF* node, void* -// data) { -// function_information.called.insert(node->name()->ToIdentifierVector()); -// } - // Check INSERT and UPDATE statement to emit warnings for side effects. void IdentifierResolver::visitASTInsertStatement(const ASTInsertStatement *node, void *data) { @@ -231,6 +225,12 @@ void IdentifierResolver::visitASTDropFunctionStatement( visitASTChildren(node, data); } +void IdentifierResolver::visitASTTVF(const ASTTVF* node, void* data) { + identifier_information.function_information.called.insert( + node->name()->ToIdentifierVector()); + visitASTChildren(node, data); +} + void IdentifierResolver::visitASTFunctionCall(const ASTFunctionCall *node, void *data) { identifier_information.function_information.called.insert( diff --git a/alphasql/identifier_resolver.h b/alphasql/identifier_resolver.h index c2ba0a81..04cce343 100644 --- a/alphasql/identifier_resolver.h +++ b/alphasql/identifier_resolver.h @@ -101,6 +101,7 @@ class IdentifierResolver : public DefaultParseTreeVisitor { // Functions void visitASTDropFunctionStatement(const ASTDropFunctionStatement *node, void *data) override; + void visitASTTVF(const ASTTVF* node, void* data) override; void visitASTFunctionCall(const ASTFunctionCall *node, void *data) override; void visitASTFunctionDeclaration(const ASTFunctionDeclaration *node, void *data) override; diff --git a/samples/tvf/call_tvf.sql b/samples/tvf/call_tvf.sql new file mode 100644 index 00000000..ff5ce4f1 --- /dev/null +++ b/samples/tvf/call_tvf.sql @@ -0,0 +1,5 @@ +CREATE OR REPLACE TABLE `dataset.tvf_table` AS +SELECT + * +FROM + `dataset.tvf`(0); diff --git a/samples/tvf/define_tvf.sql b/samples/tvf/define_tvf.sql new file mode 100644 index 00000000..b198f28c --- /dev/null +++ b/samples/tvf/define_tvf.sql @@ -0,0 +1,13 @@ +CREATE OR REPLACE TABLE FUNCTION `dataset.tvf`(input int64) +AS + SELECT + * + EXCEPT ( + test_code + ) + FROM + UNNEST(ARRAY[STRUCT("1" AS id, "apple" AS product_name, 120 AS price, date("2022-01-11") AS purchase_date, + 1 AS test_code), ("2", "banana", 100, date("2022-01-11"), 1), ("3", "orange", 80, date("2022-01-12"), + 1)]) + WHERE + test_code = input; From 64e12aa64c851f986dcb5d3d54c9ef53a9145dbe Mon Sep 17 00:00:00 2001 From: Matts966 Date: Wed, 13 Apr 2022 16:19:09 +0000 Subject: [PATCH 2/2] Update Snapshot --- samples/ml/alphacheck_stdout.txt | 3 ++- .../ml/side_effect_first/alphacheck_stdout.txt | 3 ++- .../alphacheck_stdout.txt | 3 ++- samples/ml/with_all/alphacheck_stdout.txt | 3 ++- samples/ml/with_functions/alphacheck_stdout.txt | 3 ++- samples/ml/with_tables/alphacheck_stdout.txt | 3 ++- samples/sample-ci/alphacheck_stdout.txt | 3 ++- .../side_effect_first/alphacheck_stdout.txt | 3 ++- .../alphacheck_stdout.txt | 3 ++- .../sample-ci/with_all/alphacheck_stdout.txt | 3 ++- .../with_functions/alphacheck_stdout.txt | 3 ++- .../sample-ci/with_tables/alphacheck_stdout.txt | 3 ++- samples/tvf/alphacheck_stderr.txt | 0 samples/tvf/alphacheck_stdout.txt | 7 +++++++ samples/tvf/alphadag_stderr.txt | 0 samples/tvf/alphadag_stdout.txt | 4 ++++ samples/tvf/dag.dot | 5 +++++ samples/tvf/dag.png | Bin 0 -> 13633 bytes samples/tvf/external_tables.txt | 0 .../tvf/side_effect_first/alphacheck_stderr.txt | 0 .../tvf/side_effect_first/alphacheck_stdout.txt | 7 +++++++ .../tvf/side_effect_first/alphadag_stderr.txt | 0 .../tvf/side_effect_first/alphadag_stdout.txt | 4 ++++ samples/tvf/side_effect_first/dag.dot | 5 +++++ samples/tvf/side_effect_first/dag.png | Bin 0 -> 13633 bytes .../tvf/side_effect_first/external_tables.txt | 0 .../alphacheck_stderr.txt | 0 .../alphacheck_stdout.txt | 7 +++++++ .../alphadag_stderr.txt | 0 .../alphadag_stdout.txt | 4 ++++ .../tvf/side_effect_first_with_tables/dag.dot | 7 +++++++ .../tvf/side_effect_first_with_tables/dag.png | Bin 0 -> 16666 bytes .../external_tables.txt | 0 samples/tvf/with_all/alphacheck_stderr.txt | 0 samples/tvf/with_all/alphacheck_stdout.txt | 7 +++++++ samples/tvf/with_all/alphadag_stderr.txt | 0 samples/tvf/with_all/alphadag_stdout.txt | 4 ++++ samples/tvf/with_all/dag.dot | 9 +++++++++ samples/tvf/with_all/dag.png | Bin 0 -> 19418 bytes samples/tvf/with_all/external_tables.txt | 0 .../tvf/with_functions/alphacheck_stderr.txt | 0 .../tvf/with_functions/alphacheck_stdout.txt | 7 +++++++ samples/tvf/with_functions/alphadag_stderr.txt | 0 samples/tvf/with_functions/alphadag_stdout.txt | 4 ++++ samples/tvf/with_functions/dag.dot | 7 +++++++ samples/tvf/with_functions/dag.png | Bin 0 -> 16391 bytes samples/tvf/with_functions/external_tables.txt | 0 samples/tvf/with_tables/alphacheck_stderr.txt | 0 samples/tvf/with_tables/alphacheck_stdout.txt | 7 +++++++ samples/tvf/with_tables/alphadag_stderr.txt | 0 samples/tvf/with_tables/alphadag_stdout.txt | 4 ++++ samples/tvf/with_tables/dag.dot | 7 +++++++ samples/tvf/with_tables/dag.png | Bin 0 -> 16666 bytes samples/tvf/with_tables/external_tables.txt | 0 54 files changed, 130 insertions(+), 12 deletions(-) create mode 100644 samples/tvf/alphacheck_stderr.txt create mode 100644 samples/tvf/alphacheck_stdout.txt create mode 100644 samples/tvf/alphadag_stderr.txt create mode 100644 samples/tvf/alphadag_stdout.txt create mode 100644 samples/tvf/dag.dot create mode 100644 samples/tvf/dag.png create mode 100644 samples/tvf/external_tables.txt create mode 100644 samples/tvf/side_effect_first/alphacheck_stderr.txt create mode 100644 samples/tvf/side_effect_first/alphacheck_stdout.txt create mode 100644 samples/tvf/side_effect_first/alphadag_stderr.txt create mode 100644 samples/tvf/side_effect_first/alphadag_stdout.txt create mode 100644 samples/tvf/side_effect_first/dag.dot create mode 100644 samples/tvf/side_effect_first/dag.png create mode 100644 samples/tvf/side_effect_first/external_tables.txt create mode 100644 samples/tvf/side_effect_first_with_tables/alphacheck_stderr.txt create mode 100644 samples/tvf/side_effect_first_with_tables/alphacheck_stdout.txt create mode 100644 samples/tvf/side_effect_first_with_tables/alphadag_stderr.txt create mode 100644 samples/tvf/side_effect_first_with_tables/alphadag_stdout.txt create mode 100644 samples/tvf/side_effect_first_with_tables/dag.dot create mode 100644 samples/tvf/side_effect_first_with_tables/dag.png create mode 100644 samples/tvf/side_effect_first_with_tables/external_tables.txt create mode 100644 samples/tvf/with_all/alphacheck_stderr.txt create mode 100644 samples/tvf/with_all/alphacheck_stdout.txt create mode 100644 samples/tvf/with_all/alphadag_stderr.txt create mode 100644 samples/tvf/with_all/alphadag_stdout.txt create mode 100644 samples/tvf/with_all/dag.dot create mode 100644 samples/tvf/with_all/dag.png create mode 100644 samples/tvf/with_all/external_tables.txt create mode 100644 samples/tvf/with_functions/alphacheck_stderr.txt create mode 100644 samples/tvf/with_functions/alphacheck_stdout.txt create mode 100644 samples/tvf/with_functions/alphadag_stderr.txt create mode 100644 samples/tvf/with_functions/alphadag_stdout.txt create mode 100644 samples/tvf/with_functions/dag.dot create mode 100644 samples/tvf/with_functions/dag.png create mode 100644 samples/tvf/with_functions/external_tables.txt create mode 100644 samples/tvf/with_tables/alphacheck_stderr.txt create mode 100644 samples/tvf/with_tables/alphacheck_stdout.txt create mode 100644 samples/tvf/with_tables/alphadag_stderr.txt create mode 100644 samples/tvf/with_tables/alphadag_stdout.txt create mode 100644 samples/tvf/with_tables/dag.dot create mode 100644 samples/tvf/with_tables/dag.png create mode 100644 samples/tvf/with_tables/external_tables.txt diff --git a/samples/ml/alphacheck_stdout.txt b/samples/ml/alphacheck_stdout.txt index 15dca481..7a5bc6dc 100644 --- a/samples/ml/alphacheck_stdout.txt +++ b/samples/ml/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/ml/create_input.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/ml/side_effect_first/alphacheck_stdout.txt b/samples/ml/side_effect_first/alphacheck_stdout.txt index 15dca481..7a5bc6dc 100644 --- a/samples/ml/side_effect_first/alphacheck_stdout.txt +++ b/samples/ml/side_effect_first/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/ml/create_input.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/ml/side_effect_first_with_tables/alphacheck_stdout.txt b/samples/ml/side_effect_first_with_tables/alphacheck_stdout.txt index 15dca481..7a5bc6dc 100644 --- a/samples/ml/side_effect_first_with_tables/alphacheck_stdout.txt +++ b/samples/ml/side_effect_first_with_tables/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/ml/create_input.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/ml/with_all/alphacheck_stdout.txt b/samples/ml/with_all/alphacheck_stdout.txt index 15dca481..7a5bc6dc 100644 --- a/samples/ml/with_all/alphacheck_stdout.txt +++ b/samples/ml/with_all/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/ml/create_input.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/ml/with_functions/alphacheck_stdout.txt b/samples/ml/with_functions/alphacheck_stdout.txt index 15dca481..7a5bc6dc 100644 --- a/samples/ml/with_functions/alphacheck_stdout.txt +++ b/samples/ml/with_functions/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/ml/create_input.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/ml/with_tables/alphacheck_stdout.txt b/samples/ml/with_tables/alphacheck_stdout.txt index 15dca481..7a5bc6dc 100644 --- a/samples/ml/with_tables/alphacheck_stdout.txt +++ b/samples/ml/with_tables/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/ml/create_input.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/sample-ci/alphacheck_stdout.txt b/samples/sample-ci/alphacheck_stdout.txt index 1be14586..ec4f4750 100644 --- a/samples/sample-ci/alphacheck_stdout.txt +++ b/samples/sample-ci/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/sample-ci/sample/create_datawarehouse3.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/sample-ci/side_effect_first/alphacheck_stdout.txt b/samples/sample-ci/side_effect_first/alphacheck_stdout.txt index 1be14586..ec4f4750 100644 --- a/samples/sample-ci/side_effect_first/alphacheck_stdout.txt +++ b/samples/sample-ci/side_effect_first/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/sample-ci/sample/create_datawarehouse3.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/sample-ci/side_effect_first_with_tables/alphacheck_stdout.txt b/samples/sample-ci/side_effect_first_with_tables/alphacheck_stdout.txt index 1be14586..ec4f4750 100644 --- a/samples/sample-ci/side_effect_first_with_tables/alphacheck_stdout.txt +++ b/samples/sample-ci/side_effect_first_with_tables/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/sample-ci/sample/create_datawarehouse3.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/sample-ci/with_all/alphacheck_stdout.txt b/samples/sample-ci/with_all/alphacheck_stdout.txt index 1be14586..ec4f4750 100644 --- a/samples/sample-ci/with_all/alphacheck_stdout.txt +++ b/samples/sample-ci/with_all/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/sample-ci/sample/create_datawarehouse3.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/sample-ci/with_functions/alphacheck_stdout.txt b/samples/sample-ci/with_functions/alphacheck_stdout.txt index 1be14586..ec4f4750 100644 --- a/samples/sample-ci/with_functions/alphacheck_stdout.txt +++ b/samples/sample-ci/with_functions/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/sample-ci/sample/create_datawarehouse3.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/sample-ci/with_tables/alphacheck_stdout.txt b/samples/sample-ci/with_tables/alphacheck_stdout.txt index 1be14586..ec4f4750 100644 --- a/samples/sample-ci/with_tables/alphacheck_stdout.txt +++ b/samples/sample-ci/with_tables/alphacheck_stdout.txt @@ -1,5 +1,6 @@ Analyzing "samples/sample-ci/sample/create_datawarehouse3.sql" -catalog: +tables: dataset.main tablename1 tablename2 +tvfs: diff --git a/samples/tvf/alphacheck_stderr.txt b/samples/tvf/alphacheck_stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/alphacheck_stdout.txt b/samples/tvf/alphacheck_stdout.txt new file mode 100644 index 00000000..9235e66f --- /dev/null +++ b/samples/tvf/alphacheck_stdout.txt @@ -0,0 +1,7 @@ +Analyzing "samples/tvf/define_tvf.sql" +Create Table Function Statement analyzed, adding function to catalog... +SUCCESS: analysis finished! +Analyzing "samples/tvf/call_tvf.sql" +DDL analyzed, adding table to catalog... +SUCCESS: analysis finished! +Successfully finished type check! diff --git a/samples/tvf/alphadag_stderr.txt b/samples/tvf/alphadag_stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/alphadag_stdout.txt b/samples/tvf/alphadag_stdout.txt new file mode 100644 index 00000000..e02d6ee0 --- /dev/null +++ b/samples/tvf/alphadag_stdout.txt @@ -0,0 +1,4 @@ +Reading paths passed as a command line arguments... +Only files that end with .sql or .bq are analyzed. +Reading "samples/tvf/call_tvf.sql" +Reading "samples/tvf/define_tvf.sql" diff --git a/samples/tvf/dag.dot b/samples/tvf/dag.dot new file mode 100644 index 00000000..676f6b26 --- /dev/null +++ b/samples/tvf/dag.dot @@ -0,0 +1,5 @@ +digraph G { +0 [label="samples/tvf/call_tvf.sql", shape="", type=query]; +1 [label="samples/tvf/define_tvf.sql", shape="", type=query]; +1->0 ; +} diff --git a/samples/tvf/dag.png b/samples/tvf/dag.png new file mode 100644 index 0000000000000000000000000000000000000000..eb41fb8cf315d0de717b8f87be9daf94181064ee GIT binary patch literal 13633 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 ; +} diff --git a/samples/tvf/side_effect_first/dag.png b/samples/tvf/side_effect_first/dag.png new file mode 100644 index 0000000000000000000000000000000000000000..eb41fb8cf315d0de717b8f87be9daf94181064ee GIT binary patch literal 13633 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 ; +1->0 ; +} diff --git a/samples/tvf/side_effect_first_with_tables/dag.png b/samples/tvf/side_effect_first_with_tables/dag.png new file mode 100644 index 0000000000000000000000000000000000000000..b71d187d22e34b25a2bbebd8367ee1348c949574 GIT binary patch literal 16666 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 literal 0 HcmV?d00001 diff --git a/samples/tvf/side_effect_first_with_tables/external_tables.txt b/samples/tvf/side_effect_first_with_tables/external_tables.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/with_all/alphacheck_stderr.txt b/samples/tvf/with_all/alphacheck_stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/with_all/alphacheck_stdout.txt b/samples/tvf/with_all/alphacheck_stdout.txt new file mode 100644 index 00000000..9235e66f --- /dev/null +++ b/samples/tvf/with_all/alphacheck_stdout.txt @@ -0,0 +1,7 @@ +Analyzing "samples/tvf/define_tvf.sql" +Create Table Function Statement analyzed, adding function to catalog... +SUCCESS: analysis finished! +Analyzing "samples/tvf/call_tvf.sql" +DDL analyzed, adding table to catalog... +SUCCESS: analysis finished! +Successfully finished type check! diff --git a/samples/tvf/with_all/alphadag_stderr.txt b/samples/tvf/with_all/alphadag_stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/with_all/alphadag_stdout.txt b/samples/tvf/with_all/alphadag_stdout.txt new file mode 100644 index 00000000..e02d6ee0 --- /dev/null +++ b/samples/tvf/with_all/alphadag_stdout.txt @@ -0,0 +1,4 @@ +Reading paths passed as a command line arguments... +Only files that end with .sql or .bq are analyzed. +Reading "samples/tvf/call_tvf.sql" +Reading "samples/tvf/define_tvf.sql" diff --git a/samples/tvf/with_all/dag.dot b/samples/tvf/with_all/dag.dot new file mode 100644 index 00000000..c8a27b4e --- /dev/null +++ b/samples/tvf/with_all/dag.dot @@ -0,0 +1,9 @@ +digraph G { +0 [label="samples/tvf/call_tvf.sql", shape="", type=query]; +1 [label="samples/tvf/define_tvf.sql", shape="", type=query]; +2 [label="dataset.tvf_table", shape=box, type=table]; +3 [label="dataset.tvf", shape=cds, type=function]; +0->2 ; +1->3 ; +3->0 ; +} diff --git a/samples/tvf/with_all/dag.png b/samples/tvf/with_all/dag.png new file mode 100644 index 0000000000000000000000000000000000000000..64374c0532499e58b6946ba044bcb7575c1d43f6 GIT binary patch literal 19418 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 ZQaQ?Wi#6==%eqLXPpT?qDqO$!zX8LFpdtVO literal 0 HcmV?d00001 diff --git a/samples/tvf/with_all/external_tables.txt b/samples/tvf/with_all/external_tables.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/with_functions/alphacheck_stderr.txt b/samples/tvf/with_functions/alphacheck_stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/with_functions/alphacheck_stdout.txt b/samples/tvf/with_functions/alphacheck_stdout.txt new file mode 100644 index 00000000..9235e66f --- /dev/null +++ b/samples/tvf/with_functions/alphacheck_stdout.txt @@ -0,0 +1,7 @@ +Analyzing "samples/tvf/define_tvf.sql" +Create Table Function Statement analyzed, adding function to catalog... +SUCCESS: analysis finished! +Analyzing "samples/tvf/call_tvf.sql" +DDL analyzed, adding table to catalog... +SUCCESS: analysis finished! +Successfully finished type check! diff --git a/samples/tvf/with_functions/alphadag_stderr.txt b/samples/tvf/with_functions/alphadag_stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/with_functions/alphadag_stdout.txt b/samples/tvf/with_functions/alphadag_stdout.txt new file mode 100644 index 00000000..e02d6ee0 --- /dev/null +++ b/samples/tvf/with_functions/alphadag_stdout.txt @@ -0,0 +1,4 @@ +Reading paths passed as a command line arguments... +Only files that end with .sql or .bq are analyzed. +Reading "samples/tvf/call_tvf.sql" +Reading "samples/tvf/define_tvf.sql" diff --git a/samples/tvf/with_functions/dag.dot b/samples/tvf/with_functions/dag.dot new file mode 100644 index 00000000..b8f97b4d --- /dev/null +++ b/samples/tvf/with_functions/dag.dot @@ -0,0 +1,7 @@ +digraph G { +0 [label="samples/tvf/call_tvf.sql", shape="", type=query]; +1 [label="samples/tvf/define_tvf.sql", shape="", type=query]; +2 [label="dataset.tvf", shape=cds, type=function]; +1->2 ; +2->0 ; +} diff --git a/samples/tvf/with_functions/dag.png b/samples/tvf/with_functions/dag.png new file mode 100644 index 0000000000000000000000000000000000000000..1df5fae0431ac5bd6633d5e101748e8817c1a8d9 GIT binary patch literal 16391 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 literal 0 HcmV?d00001 diff --git a/samples/tvf/with_functions/external_tables.txt b/samples/tvf/with_functions/external_tables.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/with_tables/alphacheck_stderr.txt b/samples/tvf/with_tables/alphacheck_stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/with_tables/alphacheck_stdout.txt b/samples/tvf/with_tables/alphacheck_stdout.txt new file mode 100644 index 00000000..9235e66f --- /dev/null +++ b/samples/tvf/with_tables/alphacheck_stdout.txt @@ -0,0 +1,7 @@ +Analyzing "samples/tvf/define_tvf.sql" +Create Table Function Statement analyzed, adding function to catalog... +SUCCESS: analysis finished! +Analyzing "samples/tvf/call_tvf.sql" +DDL analyzed, adding table to catalog... +SUCCESS: analysis finished! +Successfully finished type check! diff --git a/samples/tvf/with_tables/alphadag_stderr.txt b/samples/tvf/with_tables/alphadag_stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/samples/tvf/with_tables/alphadag_stdout.txt b/samples/tvf/with_tables/alphadag_stdout.txt new file mode 100644 index 00000000..e02d6ee0 --- /dev/null +++ b/samples/tvf/with_tables/alphadag_stdout.txt @@ -0,0 +1,4 @@ +Reading paths passed as a command line arguments... +Only files that end with .sql or .bq are analyzed. +Reading "samples/tvf/call_tvf.sql" +Reading "samples/tvf/define_tvf.sql" diff --git a/samples/tvf/with_tables/dag.dot b/samples/tvf/with_tables/dag.dot new file mode 100644 index 00000000..a70c968a --- /dev/null +++ b/samples/tvf/with_tables/dag.dot @@ -0,0 +1,7 @@ +digraph G { +0 [label="samples/tvf/call_tvf.sql", shape="", type=query]; +1 [label="samples/tvf/define_tvf.sql", shape="", type=query]; +2 [label="dataset.tvf_table", shape=box, type=table]; +0->2 ; +1->0 ; +} diff --git a/samples/tvf/with_tables/dag.png b/samples/tvf/with_tables/dag.png new file mode 100644 index 0000000000000000000000000000000000000000..b71d187d22e34b25a2bbebd8367ee1348c949574 GIT binary patch literal 16666 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 literal 0 HcmV?d00001 diff --git a/samples/tvf/with_tables/external_tables.txt b/samples/tvf/with_tables/external_tables.txt new file mode 100644 index 00000000..e69de29b