aboutsummaryrefslogtreecommitdiff
path: root/tests/analyser_query_test.ml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/analyser_query_test.ml')
-rw-r--r--tests/analyser_query_test.ml95
1 files changed, 91 insertions, 4 deletions
diff --git a/tests/analyser_query_test.ml b/tests/analyser_query_test.ml
index ed89623..37a748b 100644
--- a/tests/analyser_query_test.ml
+++ b/tests/analyser_query_test.ml
@@ -46,11 +46,11 @@ let check_externals =
let query = Q.check_external conf (List.hd conf.externals) in
let expected_query =
- "SELECT 'source'.'id', 'source'.'col_1'\n\
+ "SELECT 'source'.'id', ('source'.'col_1')\n\
FROM 'source' AS 'source'\n\
LEFT JOIN 'other' AS 'other' ON rtrim(upper('source'.'col_1')) = \
'other'.'key_other' WHERE 'other'.'key_other' IS NULL AND \
- 'source'.'col_1' IS NOT NULL AND 'source'.'col_1' <> ''"
+ ('source'.'col_1') IS NOT NULL AND ('source'.'col_1') <> ''"
in
Alcotest.check Alcotest.string "" expected_query query.q
@@ -179,6 +179,7 @@ let prepare_insert =
name = "key_test";
expression = Concat [ Path 1; Literal "_"; Empty ];
columns = lazy (ImportContainers.IntSet.singleton 1);
+ filters = [];
}
in
@@ -207,7 +208,7 @@ let filter_group =
let contents, _ = ImportAnalyser.Query.select conf in
let expected =
- {|WITH filter0 AS (SELECT source.id, LAST_VALUE('source'.'col_3') OVER (PARTITION BY 'source'.'col_1' ORDER BY 'source'.'col_1' RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS group_function
+ {|WITH filter0 AS (SELECT source.id, (LAST_VALUE('source'.'col_3') OVER (PARTITION BY 'source'.'col_1' ORDER BY 'source'.'col_1' RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS group_function
FROM 'source' AS 'source'
LEFT JOIN 'other' AS 'other' ON rtrim(upper('source'.'col_1')) = 'other'.'key_other'
LEFT JOIN 'last' AS 'last_file' ON rtrim(upper('other'.'col_1')) = 'last_file'.'key_last_file')
@@ -239,7 +240,7 @@ let filter_group2 =
let contents, _ = ImportAnalyser.Query.select conf in
let expected =
- {|WITH filter0 AS (SELECT source.id, LAST_VALUE('source'.'col_3') OVER (PARTITION BY 'source'.'col_1' ORDER BY 'source'.'col_1' RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS group_function
+ {|WITH filter0 AS (SELECT source.id, (LAST_VALUE('source'.'col_3') OVER (PARTITION BY 'source'.'col_1' ORDER BY 'source'.'col_1' RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS group_function
FROM 'source' AS 'source'
LEFT JOIN 'other' AS 'other' ON rtrim(upper('source'.'col_1')) = 'other'.'key_other'
LEFT JOIN 'last' AS 'last_file' ON rtrim(upper('other'.'col_1')) = 'last_file'.'key_last_file')
@@ -253,6 +254,89 @@ WHERE (COALESCE('source'.'col_3',0)=0) AND filter0.group_function|}
Alcotest.check Alcotest.string "" expected contents.q
+(** Add an external with a filter. Ensure the predicate is reported in the
+ query. *)
+let external_filter =
+ "external_filter" >:: fun _ ->
+ let conf =
+ Syntax.
+ {
+ ConfLoader.conf with
+ externals =
+ [
+ {
+ ConfLoader.external_other with
+ filters = [ Expression_builder.(equal (path 1) integer_one) ];
+ };
+ ];
+ columns = [ Expression_builder.empty ];
+ }
+ in
+
+ let query, _ = ImportAnalyser.Query.select conf in
+ let expected_query =
+ {|SELECT '' AS result_0
+FROM 'source' AS 'source'
+LEFT JOIN 'other' AS 'other' ON rtrim(upper('source'.'col_1')) = 'other'.'key_other' AND (COALESCE('other'.'col_1',0)=1)|}
+ in
+ Alcotest.check Test_migration.trimed_string "" expected_query query.q
+
+let order_by =
+ "order_by" >:: fun () ->
+ let conf =
+ Syntax.
+ {
+ ConfLoader.conf with
+ externals = [];
+ columns =
+ [
+ Expression_builder.path
+ ImportDataTypes.Path.{ alias = None; column = 1 };
+ ];
+ sort =
+ [
+ Expression_builder.path
+ ImportDataTypes.Path.{ alias = None; column = 1 };
+ Expression_builder.integer_one;
+ ];
+ }
+ in
+ let query, _ = ImportAnalyser.Query.select conf in
+ let expected_query =
+ {|SELECT 'source'.'col_1' AS result_0
+FROM 'source' AS 'source'
+ORDER BY ('source'.'col_1'), (1)|}
+ in
+ Alcotest.check Test_migration.trimed_string "" expected_query query.q
+
+let group_by =
+ "order_by" >:: fun () ->
+ let conf =
+ Syntax.
+ {
+ ConfLoader.conf with
+ externals = [];
+ columns =
+ [
+ Expression_builder.path
+ ImportDataTypes.Path.{ alias = None; column = 1 };
+ ];
+ uniq =
+ [
+ Expression_builder.path
+ ImportDataTypes.Path.{ alias = None; column = 1 };
+ Expression_builder.integer_one;
+ ];
+ }
+ in
+ let query, _ = ImportAnalyser.Query.select conf in
+ let expected_query =
+ {|SELECT 'source'.'col_1' AS result_0
+FROM 'source' AS 'source'
+GROUP BY ('source'.'col_1'), (1)|}
+ in
+ Alcotest.check Test_migration.trimed_string "" expected_query query.q
+
let test_suit =
[
create_table;
@@ -265,6 +349,9 @@ let test_suit =
prepare_insert;
filter_group;
filter_group2;
+ external_filter;
+ order_by;
+ group_by;
]
let tests = "analyser_query_test" >::: test_suit