Added asterix project
git-svn-id: https://asterixdb.googlecode.com/svn/trunk/asterix@12 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double.aql
new file mode 100644
index 0000000..2c2494b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_avg_double.adm";
+
+avg(
+ for $x in [1.0, 2.0, double("3.0")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null.aql
new file mode 100644
index 0000000..c2e9141
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_avg_double_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+let $a := avg(
+ for $x in dataset('Numeric')
+ return $x.doubleField
+)
+return {"average": $a}
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float.aql
new file mode 100644
index 0000000..a7906ff
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_avg_float.adm";
+
+avg(
+ for $x in [float("1"), float("2"), float("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null.aql
new file mode 100644
index 0000000..3b60039
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_avg_float_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+let $a := avg(
+ for $x in dataset('Numeric')
+ return $x.floatField
+)
+return {"average": $a}
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16.aql
new file mode 100644
index 0000000..d218675
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_avg_int16.adm";
+
+avg(
+ for $x in [int16("1"), int16("2"), int16("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null.aql
new file mode 100644
index 0000000..642f4e3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_avg_int16_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+let $a := avg(
+ for $x in dataset('Numeric')
+ return $x.int16Field
+)
+return {"average": $a}
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32.aql
new file mode 100644
index 0000000..44aff70
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_avg_int32.adm";
+
+avg(
+ for $x in [1, 2, 3]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null.aql
new file mode 100644
index 0000000..5fcb925
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_avg_int32_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+let $a := avg(
+ for $x in dataset('Numeric')
+ return $x.int32Field
+)
+return {"average": $a}
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64.aql
new file mode 100644
index 0000000..4e6f6af
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_avg_int64.adm";
+
+avg(
+ for $x in [int64("1"), int64("2"), int64("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null.aql
new file mode 100644
index 0000000..4f18910
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_avg_int64_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+let $a := avg(
+ for $x in dataset('Numeric')
+ return $x.int64Field
+)
+return {"average": $a}
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8.aql
new file mode 100644
index 0000000..e8f327d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_avg_int8.adm";
+
+avg(
+ for $x in [int8("1"),int8("2"), int8("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null.aql
new file mode 100644
index 0000000..c58e85a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_avg_int8_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+let $a := avg(
+ for $x in dataset('Numeric')
+ return $x.int8Field
+)
+return {"average": $a}
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01.aql
new file mode 100644
index 0000000..8d14789
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_count_01.adm";
+
+count(
+ for $x in [1, 2, 3]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null.aql
new file mode 100644
index 0000000..5a94d54
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_count_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+let $c := count(
+ for $x in dataset('Numeric')
+ return $x.doubleField
+)
+return {"count": $c}
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01.aql
new file mode 100644
index 0000000..24ca240
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01.aql
@@ -0,0 +1,12 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_global-avg_01.adm";
+
+global-avg(
+ for $x in [1.0, 2.0, double("3.0")]
+ return { "sum": $x, "count": 1 }
+)
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null.aql
new file mode 100644
index 0000000..a8151d8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null.aql
@@ -0,0 +1,29 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_global-avg_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+
+let $c := global-avg(
+ for $x in dataset('Numeric')
+ return { "sum": $x.doubleField, "count": $x.int32Field }
+)
+return {"global-average": $c}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double.aql
new file mode 100644
index 0000000..75d4af8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_local-avg_double.adm";
+
+local-avg(
+ for $x in [1.0, 2.0, double("3.0")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null.aql
new file mode 100644
index 0000000..6990fc4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_local-avg_double_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+local-avg(
+ for $x in dataset('Numeric')
+ return $x.doubleField
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float.aql
new file mode 100644
index 0000000..f79fa3d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_local-avg_float.adm";
+
+local-avg(
+ for $x in [float("1"), float("2"), float("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null.aql
new file mode 100644
index 0000000..6f5a39d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_local-avg_float_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+local-avg(
+ for $x in dataset('Numeric')
+ return $x.floatField
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16.aql
new file mode 100644
index 0000000..c0e61e6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_local-avg_int16.adm";
+
+local-avg(
+ for $x in [int16("1"), int16("2"), int16("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null.aql
new file mode 100644
index 0000000..65287f1
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_local-avg_int16_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+local-avg(
+ for $x in dataset('Numeric')
+ return $x.int16Field
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32.aql
new file mode 100644
index 0000000..977dbcf
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_local-avg_int32.adm";
+
+local-avg(
+ for $x in [1, 2, 3]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null.aql
new file mode 100644
index 0000000..eea2d41
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_local-avg_int32_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+local-avg(
+ for $x in dataset('Numeric')
+ return $x.int32Field
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64.aql
new file mode 100644
index 0000000..3bfbe26
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_local-avg_int64.adm";
+
+local-avg(
+ for $x in [int64("1"), int64("2"), int64("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null.aql
new file mode 100644
index 0000000..d25ae69
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_local-avg_int64_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+local-avg(
+ for $x in dataset('Numeric')
+ return $x.int64Field
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8.aql
new file mode 100644
index 0000000..cd3e3fe
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_local-avg_int8.adm";
+
+local-avg(
+ for $x in [int8("1"),int8("2"), int8("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null.aql
new file mode 100644
index 0000000..b8e4bcb
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_local-avg_int8_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+local-avg(
+ for $x in dataset('Numeric')
+ return $x.int8Field
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double.aql
new file mode 100644
index 0000000..4a0bfe8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_sum_double.adm";
+
+sum(
+ for $x in [1.0, 2.0, 3.0]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null.aql
new file mode 100644
index 0000000..d919120
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_sum_double_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+sum(
+ for $x in dataset('Numeric')
+ return $x.doubleField
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float.aql
new file mode 100644
index 0000000..0798dd8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_sum_float.adm";
+
+sum(
+ for $x in [float("1"), float("2"), float("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null.aql
new file mode 100644
index 0000000..767c5a4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_sum_float_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+sum(
+ for $x in dataset('Numeric')
+ return $x.floatField
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16.aql
new file mode 100644
index 0000000..77ea235
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_sum_int16.adm";
+
+sum(
+ for $x in [int16("1"), int16("2"), int16("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null.aql
new file mode 100644
index 0000000..7535a95
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_sum_int16_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+sum(
+ for $x in dataset('Numeric')
+ return $x.int16Field
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32.aql
new file mode 100644
index 0000000..c8d68aa
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_sum_int32.adm";
+
+sum(
+ for $x in [1, 2, int32("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null.aql
new file mode 100644
index 0000000..2fe268920
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_sum_int32_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+sum(
+ for $x in dataset('Numeric')
+ return $x.int32Field
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64.aql
new file mode 100644
index 0000000..d4b6851
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_sum_int64.adm";
+
+sum(
+ for $x in [int64("1"), int64("2"), int64("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null.aql
new file mode 100644
index 0000000..7f6428a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_sum_int64_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+sum(
+ for $x in dataset('Numeric')
+ return $x.int64Field
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8.aql
new file mode 100644
index 0000000..8e8c4da
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/aggregate_sum_int8.adm";
+
+sum(
+ for $x in [int8("1"), int8("2"), int8("3")]
+ return $x
+)
+
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null.aql
new file mode 100644
index 0000000..e1fad61
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+write output to nc1:"rttest/aggregate_sum_int8_null.adm";
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.json"),("format"="adm"));
+
+sum(
+ for $x in dataset('Numeric')
+ return $x.int8Field
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/boolean/and_01.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_01.aql
new file mode 100644
index 0000000..9255694
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/boolean/and_01.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/boolean_and_01.adm";
+
+for $x in ["true"]
+for $y in ["false"]
+return $x and $y
diff --git a/asterix-app/src/test/resources/runtimets/queries/boolean/and_null.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null.aql
new file mode 100644
index 0000000..eb02bde
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/boolean_and_null.adm";
+
+let $x := boolean("true")
+let $y := null
+return $x and $y
diff --git a/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false.aql
new file mode 100644
index 0000000..e2a26f6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/boolean_and_null_false.adm";
+
+let $x := boolean("false")
+let $y := null
+return $x and $y
diff --git a/asterix-app/src/test/resources/runtimets/queries/boolean/not_01.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/not_01.aql
new file mode 100644
index 0000000..6297755
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/boolean/not_01.aql
@@ -0,0 +1,12 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/boolean_not_01.adm";
+
+let $x := true
+let $y := false
+let $z := null
+return {"not_x": not($x), "not_y": not($y), "not_z": not($z)}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order.aql
new file mode 100644
index 0000000..2e151ab
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order.aql
@@ -0,0 +1,17 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_datetime_order.adm";
+
+let $dt1 := datetime("2011-12-31T14:00:00-10:00")
+let $dt2 := datetime("2012-01-01T00:00:00Z")
+let $dt3 := datetime("2005-01-01T00:00:00+04:00")
+let $dt4 := datetime("2011-12-31T13:00:00-11:00")
+let $dt5 := datetime("2012-04-06T00:00:00Z")
+
+for $dt in [$dt1, $dt2, $dt3, $dt4, $dt5]
+order by $dt
+return $dt
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq.aql
new file mode 100644
index 0000000..e38bdae
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq.aql
@@ -0,0 +1,13 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_datetime_tzeq.adm";
+
+let $dt1 := datetime("2011-12-31T14:00:00-10:00")
+let $dt2 := datetime("2012-01-01T00:00:00Z")
+
+
+return [$dt1 = $dt2]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/double.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double.aql
new file mode 100644
index 0000000..55c7de0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/double.aql
@@ -0,0 +1,19 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_double.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $r1 := $c6 > $c1
+let $r2 := $c6 >= $c2
+let $r3 := $c6 < $c3
+let $r4 := $c6 <= $c4
+let $r5 := $c6 = $c5
+let $r6 := $c6 != $c6
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01.aql
new file mode 100644
index 0000000..663be22
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_double_gte_01.adm";
+
+for $i in [0.8, 0.8999999761581421, 0.9, 0.901]
+where $i >= 0.9
+return $i
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/double_null.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double_null.aql
new file mode 100644
index 0000000..f3ab7f6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/double_null.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_double_null.adm";
+
+let $c1 := double("-6.5d")
+let $c2 := [1]
+let $c3 := $c2[1]
+let $r1 := $c1 > $c3
+let $r2 := $c3 >= $c1
+let $r3 := $c1 < $c3
+let $r4 := $c3 <= $c1
+let $r5 := $c1 = $c3
+let $r6 := $c3 != $c1
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01.aql
new file mode 100644
index 0000000..8e5f9af
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01.aql
@@ -0,0 +1,12 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_eq_01.adm";
+
+for $x in [1, 2, 2]
+where $x = 2
+return $x
+
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/float.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/float.aql
new file mode 100644
index 0000000..7cfbbfb
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/float.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_float.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $r1 := $c5 > $c1
+let $r2 := $c5 >= $c2
+let $r3 := $c5 < $c3
+let $r4 := $c5 <= $c4
+let $r5 := $c5 = $c5
+let $r6 := $c5 != $c6
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/float_null.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/float_null.aql
new file mode 100644
index 0000000..afd70de
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/float_null.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_float_null.adm";
+
+let $c1 := float("-6.5d")
+let $c2 := [1]
+let $c3 := $c2[1]
+let $r1 := $c1 > $c3
+let $r2 := $c3 >= $c1
+let $r3 := $c1 < $c3
+let $r4 := $c3 <= $c1
+let $r5 := $c1 = $c3
+let $r6 := $c3 != $c1
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01.aql
new file mode 100644
index 0000000..efa5015
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01.aql
@@ -0,0 +1,12 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_gt_01.adm";
+
+for $x in [1, 3, 2]
+where $x > 1
+return $x
+
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01.aql
new file mode 100644
index 0000000..a9ffa71
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01.aql
@@ -0,0 +1,12 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_gte_01.adm";
+
+for $x in [1, 3, 2]
+where $x >= 2
+return $x
+
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/int16.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int16.aql
new file mode 100644
index 0000000..1f3701b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/int16.aql
@@ -0,0 +1,19 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_int16.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $r1 := $c2 > $c1
+let $r2 := $c2 >= $c2
+let $r3 := $c2 < $c3
+let $r4 := $c2 <= $c4
+let $r5 := $c2 = $c5
+let $r6 := $c2 != $c6
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null.aql
new file mode 100644
index 0000000..6d8d80e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null.aql
@@ -0,0 +1,18 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/comparison_int16_null.adm";
+
+let $c1 := int16("3")
+let $c2 := [1]
+let $c3 := $c2[1]
+let $r1 := $c1 > $c3
+let $r2 := $c3 >= $c1
+let $r3 := $c1 < $c3
+let $r4 := $c3 <= $c1
+let $r5 := $c1 = $c3
+let $r6 := $c3 != $c1
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/int32.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int32.aql
new file mode 100644
index 0000000..ab53691
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/int32.aql
@@ -0,0 +1,19 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_int32.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $r1 := $c3 > $c1
+let $r2 := $c3 >= $c2
+let $r3 := $c3 < $c3
+let $r4 := $c3 <= $c4
+let $r5 := $c3 = $c5
+let $r6 := $c3 != $c6
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null.aql
new file mode 100644
index 0000000..d1972e8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null.aql
@@ -0,0 +1,16 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_int32_null.adm";
+
+let $c1 := int32("3")
+let $c2 := [1]
+let $c3 := $c2[1]
+let $r1 := $c1 > $c3
+let $r2 := $c3 >= $c1
+let $r3 := $c1 < $c3
+let $r4 := $c3 <= $c1
+let $r5 := $c1 = $c3
+let $r6 := $c3 != $c1
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/int64.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int64.aql
new file mode 100644
index 0000000..a050b47
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/int64.aql
@@ -0,0 +1,19 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_int64.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $r1 := $c4 > $c1
+let $r2 := $c4 >= $c2
+let $r3 := $c4 <= $c3
+let $r4 := $c4 < $c4
+let $r5 := $c4 = $c5
+let $r6 := $c4 != $c6
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null.aql
new file mode 100644
index 0000000..5144cb4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null.aql
@@ -0,0 +1,16 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_int64_null.adm";
+
+let $c1 := int64("3")
+let $c2 := [1]
+let $c3 := $c2[1]
+let $r1 := $c1 > $c3
+let $r2 := $c3 >= $c1
+let $r3 := $c1 < $c3
+let $r4 := $c3 <= $c1
+let $r5 := $c1 = $c3
+let $r6 := $c3 != $c1
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/int8.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int8.aql
new file mode 100644
index 0000000..e06a33d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/int8.aql
@@ -0,0 +1,19 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_int8.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $r1 := $c1 > $c1
+let $r2 := $c1 >= $c2
+let $r3 := $c1 < $c3
+let $r4 := $c1 <= $c4
+let $r5 := $c1 = $c5
+let $r6 := $c1 != $c6
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null.aql
new file mode 100644
index 0000000..a38c754
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null.aql
@@ -0,0 +1,16 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_int8_null.adm";
+
+let $c1 := int8("3")
+let $c2 := [1]
+let $c3 := $c2[1]
+let $r1 := $c1 > $c3
+let $r2 := $c3 >= $c1
+let $r3 := $c1 < $c3
+let $r4 := $c3 <= $c1
+let $r5 := $c1 = $c3
+let $r6 := $c3 != $c1
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01.aql
new file mode 100644
index 0000000..db28fdc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_lt_01.adm";
+
+for $x in [1, 3, 2]
+where $x < 3
+return $x
+
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01.aql
new file mode 100644
index 0000000..e4c5ffa
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_lte_01.adm";
+
+for $x in [1, 3, 2]
+where $x <= 2
+return $x
+
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01.aql
new file mode 100644
index 0000000..ae88077
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_neq_01.adm";
+
+for $x in [1, 2, 2]
+where $x != 2
+return $x
+
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01.aql
new file mode 100644
index 0000000..7c2ce39
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_numeric-comparison_01.adm";
+
+let $l := [1.1f, 1.0f, 1.2f, 0.9, 1.3, 1, 2]
+for $i in $l
+for $j in $l
+return [$i, $j, "=", $i = $j, "<", $i < $j, "<=", $i <= $j, ">", $i > $j, ">=", $i >= $j]
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/string.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/string.aql
new file mode 100644
index 0000000..6b63d52
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/string.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_string.adm";
+
+let $c1 := "AA"
+let $c2 := "B"
+let $r1 := $c1 > $c2
+let $r2 := $c1 >= $c2
+let $r3 := $c1 < $c2
+let $r4 := $c1 <= $c2
+let $r5 := $c1 = $c2
+let $r6 := $c1 != $c2
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/string_null.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/string_null.aql
new file mode 100644
index 0000000..f959e92
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/string_null.aql
@@ -0,0 +1,16 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/comparison_string_null.adm";
+
+let $c1 := "AA"
+let $c2 := [1]
+let $c3 := $c2[1]
+let $r1 := $c1 > $c3
+let $r2 := $c3 >= $c1
+let $r3 := $c1 < $c3
+let $r4 := $c3 <= $c1
+let $r5 := $c1 = $c3
+let $r6 := $c3 != $c1
+return {"result1": $r1,"result2": $r2,"result3": $r3,"result4": $r4,"result5": $r5, "result6": $r6}
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01.aql
new file mode 100644
index 0000000..479f20f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_boolean_01.adm";
+
+let $c1 := boolean("true")
+let $c2 := boolean("false")
+return {"boolean1": $c1,"boolean2": $c2}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01.aql
new file mode 100644
index 0000000..3af819d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_circle_01.adm";
+
+let $c1 := circle("10.1234,11.1e-1 +10.2E-2")
+let $c2 := circle("0.1234,-1.00e-10 +10.5E-2")
+return {"circle1": $c1,"circle2": $c2}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/date_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/date_01.aql
new file mode 100644
index 0000000..c889627
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/date_01.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_date_01.adm";
+
+let $c1 := date("2010-10-30+05:00")
+let $c2 := date("2010-10-30-10:15")
+let $c3 := date("1987-11-19")
+let $c4 := date("1987-11-19Z")
+let $c5 := date("-1987-11-19+08:30")
+let $c6 := date("0001-12-27")
+let $c7 := date("-1951-01-27-01:45")
+return {"date1": $c1, "date2": $c2, "date3": $c3, "date4": $c4, "date5": $c5, "date6": $c6, "date7": $c7}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01.aql
new file mode 100644
index 0000000..611feff
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01.aql
@@ -0,0 +1,13 @@
+use dataverse test;
+
+write output to nc1:"rttest/constructor_datetime_01.adm";
+
+let $c1 := datetime("2010-10-30T10:50:56:999+05:45")
+let $c2 := datetime("2010-10-30T10:30:56:250-10:00")
+let $c3 := datetime("1987-11-19T09:20:00:200")
+let $c4 := datetime("1987-11-19T10:50:56Z")
+let $c5 := datetime("-1987-11-19T10:50:56:099-05:30")
+let $c6 := datetime("-0001-11-19T10:50:56:719Z")
+let $c7 := datetime("1951-12-27T12:20:15")
+return {"datetime1": $c1, "datetime2": $c2, "datetime3": $c3, "datetime4": $c4, "datetime5": $c5, "datetime6": $c6, "datetime7": $c7}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/double_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/double_01.aql
new file mode 100644
index 0000000..5595917
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/double_01.aql
@@ -0,0 +1,14 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_double_01.adm";
+
+let $c1 := double("NaN")
+let $c2 := double("INF")
+let $c3 := double("-INF")
+let $c4 := double("-80.20d")
+let $c5 := double("-20.56e-30")
+let $c6 := double("-20.56e-300")
+return {"double1": $c1,"double2": $c2,"double3": $c3,"double4": $c4,"double5": $c5,"double6": $c6}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01.aql
new file mode 100644
index 0000000..011996c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01.aql
@@ -0,0 +1,16 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_duration_01.adm";
+
+let $c1 := duration("D30Y10M25DT13H12M50S")
+let $c2 := duration("D25DT13H12M50S")
+let $c3 := duration("DT13H12M50S")
+let $c4 := duration("D30YT12MS")
+let $c5 := duration("DT13H")
+let $c6 := duration("-D30Y10M25DT13H12M50S")
+let $c7 := duration("-D25DT13H12M50S")
+let $c8 := duration("-DT13H50S")
+return {"duration1": $c1, "duration2": $c2, "duration3": $c3, "duration4": $c4, "duration5": $c5, "duration6": $c6, "duration7": $c7, "duration8": $c8}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/float_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/float_01.aql
new file mode 100644
index 0000000..4f179cc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/float_01.aql
@@ -0,0 +1,16 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_float_01.adm";
+
+let $c1 := float("NaN")
+let $c2 := float("INF")
+let $c3 := float("-INF")
+let $c4 := float("-80.20")
+let $c5 := float("-20.56e-30")
+// +5.0E10 would not generate a precise calc. even with parseFloat
+
+
+return {"float1": $c1,"float2": $c2, "float3": $c3,"float4": $c4,"float5": $c5}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/int_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/int_01.aql
new file mode 100644
index 0000000..d35c84f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/int_01.aql
@@ -0,0 +1,16 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_int_01.adm";
+
+let $c1 := int8("+80i8")
+let $c2 := int16("160")
+let $c3 := int32("+320i32")
+let $c4 := int64("640")
+let $c5 := int8("-80")
+let $c6 := int16("-160i16")
+let $c7 := int32("-320")
+let $c8 := int64("-640i64")
+return {"int8": $c1,"int16": $c2,"int32": $c3, "int64": $c4, "int8": $c5,"int16": $c6,"int32": $c7, "int64": $c8}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/line_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/line_01.aql
new file mode 100644
index 0000000..4317903
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/line_01.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_line_01.adm";
+
+let $c1 := line("10.1234,11.1e-1 +10.2E-2,-11.22")
+let $c2 := line("0.1234,-1.00e-10 +10.5E-2,-01.02")
+return {"line1": $c1,"line2": $c2}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/point_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/point_01.aql
new file mode 100644
index 0000000..09c770c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/point_01.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_point_01.adm";
+
+let $c1 := point("80.10d, -10E5")
+let $c2 := point3d("5e2, -10E+5, +10.5e-10d")
+let $c3 := point("5.10E-10d, -10E5")
+let $c4 := point3d("0.5e+2d, -10.0E+5d, +10.05e-10")
+return {"point1": $c1,"point3d1": $c2,"point2": $c3, "point3d2": $c4}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01.aql
new file mode 100644
index 0000000..750c559
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_polygon_01.adm";
+
+let $c1 := polygon("-1.2,+1.3e2 -2.14E+5,2.15 -3.5e+2,03.6 -4.6E-3,+4.81")
+let $c2 := polygon("-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75")
+return {"polygon1": $c1,"polygon2": $c2}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/string_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/string_01.aql
new file mode 100644
index 0000000..fea0cb1
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/string_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_string_01.adm";
+
+let $c1 := string("true")
+let $c2 := string("false\"")
+return {"string1": $c1,"string2": $c2}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/time_01.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/time_01.aql
new file mode 100644
index 0000000..caa90f0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/time_01.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/constructor_time_01.adm";
+
+let $c1 := time("10:50:56:200+05:00")
+let $c2 := time("10:50:56:200-10:15")
+let $c3 := time("10:50:56")
+let $c4 := time("10:50:56:200Z")
+let $c5 := time("23:59:59:999-13:30")
+let $c6 := time("24:00:00:000+14:45")
+let $c7 := time("12:59:00:019-01:00")
+return {"time1": $c1, "time2": $c2, "time3": $c3, "time4": $c4, "time5": $c5, "time6": $c6, "time7": $c7}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/co.aql b/asterix-app/src/test/resources/runtimets/queries/custord/co.aql
new file mode 100644
index 0000000..ccacb66
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/co.aql
@@ -0,0 +1,68 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse custord;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as open {
+ cid: int32,
+ name: string,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float
+}
+
+create type CustomerOrdersType as open {
+ cid: int32,
+ cust: CustomerType,
+ orders: [OrderType]
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Customers3(CustomerType)
+ partitioned by key cid on group1;
+create dataset Orders3(OrderType)
+ partitioned by key oid on group1;
+create dataset CustomerOrders3(CustomerOrdersType)
+ partitioned by key cid on group1;
+
+
+write output to nc1:"rttest/custord_co.adm";
+
+/*
+for $co1 in dataset('CustomerOrders3')
+for $o1 in $co1.orders
+return {
+ "order": $o1,
+ "ordcust":
+ for $co2 in dataset('CustomerOrders3')
+ where some $o2 in $co2.orders
+ satisfies $o2.oid = $o1.oid
+ return $co2.cust
+}
+*/
+
+for $co1 in dataset('CustomerOrders3')
+where some $o1 in $co1.orders
+satisfies $o1.oid = 10
+return $co1
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01.aql
new file mode 100644
index 0000000..83a72ee
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01.aql
@@ -0,0 +1,34 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_customer_q_01.adm";
+
+for $c in dataset('Customers')
+return $c
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02.aql
new file mode 100644
index 0000000..bb24a68
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02.aql
@@ -0,0 +1,33 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_customer_q_02.adm";
+
+for $c in dataset('Customers')
+let $nestedRec := $c.lastorder
+return { "id": $c.cid, "nestedRecord":$nestedRec, "order_id" : $nestedRec.oid}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03.aql
new file mode 100644
index 0000000..32fed3b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03.aql
@@ -0,0 +1,38 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_customer_q_03.adm";
+
+for $c in dataset('Customers')
+let $nestedRec := $c.lastorder
+let $c1 := [ $c.cid, $nestedRec.oid]
+let $c2 := {{ $c.cid, $nestedRec.oid}}
+let $c3 := [ $c.lastorder, $nestedRec]
+let $c4 := {{ $c.lastorder, $nestedRec}}
+where $c.cid >= int32("3")
+return { "id": $c.cid, "list1":$c1, "list2":$c2,"list3":$c3,"list4":$c4}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04.aql
new file mode 100644
index 0000000..218cb7b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04.aql
@@ -0,0 +1,34 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_customer_q_04.adm";
+
+for $c in dataset('Customers')
+let $rec := { "cashBack":$c.cashBack, "cashBack+5": $c.cashBack+5, "cashBack-5": $c.cashBack -5, "cashBack*5": $c.cashBack*5, "cashBack/5": $c.cashBack/ 5, "-cashBack": -$c.cashBack}
+where $c.cid >= int32("3")
+return { "id": $c.cid, "custname":$c.name, "age" : $c.age, "MathcashBack": $rec }
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05.aql
new file mode 100644
index 0000000..504df0b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05.aql
@@ -0,0 +1,36 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_customer_q_05.adm";
+
+
+for $c in dataset('Customers')
+let $rec := { "age":$c.age, "age+5": $c.age+5, "age-5": $c.age -5, "age*5": $c.age*5, "age/5": $c.age/ 5, "-age": -$c.age}
+where $c.cid >= int32("3")
+return { "custname":$c.name, "age" : $c.age, "MathAge": $rec }
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06.aql
new file mode 100644
index 0000000..0738dfe
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06.aql
@@ -0,0 +1,35 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_customer_q_06.adm";
+
+for $c in dataset('Customers')
+let $rec := $c.lastorder
+let $m := [$c.cid, $rec.oid]
+let $n := [$m[?], $m[1], $m[4]]
+return { "customerid": $c.name, "orderedlist": $n}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07.aql
new file mode 100644
index 0000000..cdcdd82
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07.aql
@@ -0,0 +1,36 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_customer_q_07.adm";
+
+for $c in dataset('Customers')
+let $rec := $c.lastorder
+let $m := [$c.cid, $rec.oid]
+let $n := {{$m[?], $m[1], $m[4]}}
+return { "customerid": $c.name, "unorderedlist": $n}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08.aql
new file mode 100644
index 0000000..baf2951
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08.aql
@@ -0,0 +1,35 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_customer_q_08.adm";
+
+for $c in dataset('Customers')
+where $c.age < 15
+return { "custname":$c.name, "custage": $c.age }
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01.aql
new file mode 100644
index 0000000..e951abc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01.aql
@@ -0,0 +1,71 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as open {
+ cid: int32,
+ name: string,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+
+
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float
+}
+
+create type CustomerOrdersType as open {
+ cid: int32,
+ cust: CustomerType,
+ orders: [OrderType]
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Customers1(CustomerType)
+ partitioned by key cid on group1;
+create dataset Orders1(OrderType)
+ partitioned by key oid on group1;
+create dataset CustomerOrders1(CustomerOrdersType)
+ partitioned by key cid on group1;
+
+load dataset Customers1
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/customer-tiny.adm"),("format"="adm")) pre-sorted;
+
+load dataset Orders1
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/order-tiny.adm"),("format"="adm")) pre-sorted;
+
+
+// write output to nc1:"rttest/denorm-cust-order_01.adm";
+
+
+write into dataset CustomerOrders1 (
+
+for $c in dataset('Customers1')
+for $o in dataset('Orders1')
+where $c.cid = $o.cid and $c.age < 21 and $c.total > 50.0
+group by $cid := $c.cid decor $cust := $c with $o
+return {"cid":$cid, "cust": $cust, "orders": $o}
+
+);
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02.aql
new file mode 100644
index 0000000..39815d7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02.aql
@@ -0,0 +1,76 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as open {
+ cid: int32,
+ name: string,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+
+
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float
+}
+
+create type CustomerOrdersType as open {
+ cid: int32,
+ cust: CustomerType,
+ orders: [OrderType]
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Customers2(CustomerType)
+ partitioned by key cid on group1;
+create dataset Orders2(OrderType)
+ partitioned by key oid on group1;
+create dataset CustomerOrders2(CustomerOrdersType)
+ partitioned by key cid on group1;
+
+load dataset Customers2
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/customer-tiny.adm"),("format"="adm")) pre-sorted;
+
+load dataset Orders2
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/order-tiny.adm"),("format"="adm")) pre-sorted;
+
+
+write into dataset CustomerOrders2 (
+
+for $c in dataset('Customers2')
+let $orders :=
+ for $o in dataset('Orders2')
+ where $o.cid = $c.cid
+ order by $o.oid asc
+ return $o
+return { "cid": $c.cid, "cust": $c, "orders": $orders }
+
+);
+
+write output to nc1:"rttest/custord_denorm-cust-order_02.adm";
+
+for $co in dataset('CustomerOrders2')
+order by $co.cid
+return $co
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03.aql
new file mode 100644
index 0000000..978bedf
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03.aql
@@ -0,0 +1,82 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as open {
+ cid: int32,
+ name: string,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float
+}
+
+create type CustomerOrdersType as open {
+ cid: int32,
+ cust: CustomerType,
+ orders: [OrderType]
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Customers3(CustomerType)
+ partitioned by key cid on group1;
+create dataset Orders3(OrderType)
+ partitioned by key oid on group1;
+create dataset CustomerOrders3(CustomerOrdersType)
+ partitioned by key cid on group1;
+
+load dataset Customers3
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/customer-tiny.adm"),("format"="adm")) pre-sorted;
+
+load dataset Orders3
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/order-tiny.adm"),("format"="adm")) pre-sorted;
+
+
+write into dataset CustomerOrders3 (
+
+for $c in dataset('Customers3')
+let $orders :=
+ for $o in dataset('Orders3')
+ where $o.cid = $c.cid
+ order by $o.orderpriority desc
+ return $o
+return { "cid": $c.cid, "cust": $c, "orders": $orders }
+
+);
+
+write output to nc1:"rttest/custord_denorm-cust-order_03.adm";
+
+for $co1 in dataset('CustomerOrders3')
+for $o1 in $co1.orders
+return {
+ "order": $o1,
+ "ordcust":
+ for $co2 in dataset('CustomerOrders3')
+ where some $o2 in $co2.orders
+ satisfies $o2.oid = $o1.oid
+ return $co2.cust
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk.aql b/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk.aql
new file mode 100644
index 0000000..d6eb4c4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk.aql
@@ -0,0 +1,49 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerOrderType as open {
+ cid: int32,
+ name: string,
+ age: int32?,
+ address: AddressType?,
+ orders: [OrderType]
+}
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset CustomerOrders(CustomerOrderType)
+ partitioned by key cid on group1;
+
+
+load dataset CustomerOrders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/custorder-tiny.adm"),("format"="adm")) pre-sorted;
+
+
+write output to nc1:"rttest/custord_freq_clark.adm";
+
+for $c in dataset('CustomerOrders')
+for $o in $c.orders
+group by $clerk := $o.clerk with $o
+let $count := count($o)
+order by $count, $clerk desc
+return { "clerk": $clerk, "ordercount": $count }
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01.aql
new file mode 100644
index 0000000..2a6a37b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01.aql
@@ -0,0 +1,52 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_join_q_01.adm";
+
+for $c in dataset('Customers')
+for $o in dataset('Orders')
+where $c.cid = $o.cid
+order by $c.name, $o.total
+return {"cust_name":$c.name, "cust_age": $c.age, "order_total":$o.total, "orderList":[$o.oid, $o.cid], "orderList":{{$o.oid, $o.cid}}}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02.aql
new file mode 100644
index 0000000..7b0cb5f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02.aql
@@ -0,0 +1,54 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_join_q_02.adm";
+
+for $c in dataset('Customers')
+for $o in dataset('Orders')
+let $rec := $c.lastorder
+let $ol := [$o.oid, $rec.oid, $o.cid]
+let $ul := {{$o.oid, $rec.oid, $o.cid}}
+where $c.cid = $o.cid
+order by $c.name, $o.total
+return {"cust_name":$c.name, "order_total": $o.total, "orderedlist": $ol, "unorderedlist": $ul }
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03.aql
new file mode 100644
index 0000000..002bdff
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03.aql
@@ -0,0 +1,54 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_join_q_03.adm";
+
+
+for $c in dataset('Customers')
+for $o in dataset('Orders')
+let $rec := $c.lastorder
+let $ol := [$o.oid, $rec.oid, $o.cid]
+let $ul := {{$o.oid, $rec.oid, $o.cid}}
+where $c.cid = $o.cid
+order by $c.name, $o.total
+return {"cust_name":$c.name, "order_total": $o.total, "orderedlist": $ol, "unorderedlist": $ul, "ol_item1": $ol[0], "ol_item2": $ol[1], "ol_item5": $ol[4], "ul_item1": $ul[?]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04.aql
new file mode 100644
index 0000000..b424796
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04.aql
@@ -0,0 +1,51 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as closed {
+ cid: int32,
+ name: string,
+ cashBack: int32,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_join_q_04.adm";
+
+
+for $c in dataset('Customers')
+return {"order_id" :
+for $o in dataset('Orders')
+where $c.cid = $o.cid
+return $o.oid }
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/load-test.aql b/asterix-app/src/test/resources/runtimets/queries/custord/load-test.aql
new file mode 100644
index 0000000..ae2d750
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/load-test.aql
@@ -0,0 +1,56 @@
+drop dataverse test if exists;
+drop nodegroup group0 if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as open {
+ cid: int32,
+ name: string,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create nodegroup group0 if not exists on nc1;
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset c1(CustomerType)
+ partitioned by key cid on group0;
+create dataset c2(CustomerType)
+ partitioned by key cid on group1;
+
+load dataset c1
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/customer-tiny.adm"),("format"="adm")) pre-sorted;
+
+
+write into dataset c2 (
+
+ for $c in dataset('c1')
+ return $c
+
+);
+
+
+write output to nc1:"rttest/custord_load-test.adm";
+
+for $c in dataset('c2')
+order by $c.cid
+return $c
+
+
+
+// write output to nc1:"rttest/denorm-cust-order_01.adm";
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01.aql
new file mode 100644
index 0000000..36e6830
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_order_q_01.adm";
+
+for $c in dataset('Orders')
+return $c
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02.aql
new file mode 100644
index 0000000..a16eab6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02.aql
@@ -0,0 +1,30 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_order_q_02.adm";
+
+for $o in dataset('Orders')
+let $c1 := [ $o.orderstatus, $o.clerk]
+let $c2 := {{ $o.orderstatus, $o.clerk}}
+let $c3 := [$o.heList, $o.openlist, $o.loc, $o.line, $o.poly, $o.lastorder]
+let $c4 := [$o.heList, $o.openlist, $o.loc, $o.line, $o.poly, $o.lastorder]
+return { "id": $o.cid, "list1":$c1, "list2":$c2,"list3":$c3,"list4":$c4}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03.aql
new file mode 100644
index 0000000..b930a10
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03.aql
@@ -0,0 +1,29 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_order_q_03.adm";
+
+for $o in dataset('Orders')
+let $c1 := [ $o.orderstatus, $o.clerk]
+let $c2 := {{ $o.orderstatus, $o.clerk}}
+let $c3 := [$o.heList, $o.openlist, $o.loc, $o.line, $o.poly, $o.lastorder]
+let $c4 := [$o.heList, $o.openlist, $o.loc, $o.line, $o.poly, $o.lastorder]
+return { "orderid": $o.oid, "ordertot":$o.total, "list": $c1, "item1": $c1[0], "item1": $c1[?], "item2": $c1[1], "item3": $c1[2]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04.aql
new file mode 100644
index 0000000..c9b22d8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04.aql
@@ -0,0 +1,30 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_order_q_04.adm";
+
+for $o in dataset('Orders')
+let $c1 := [ $o.orderstatus, $o.clerk]
+let $c2 := {{ $o.orderstatus, $o.clerk}}
+let $c3 := [$o.heList, $o.openlist, $o.loc, $o.line, $o.poly, $o.lastorder]
+let $c4 := [$o.heList, $o.openlist, $o.loc, $o.line, $o.poly, $o.lastorder]
+return { "orderid": $o.oid, "ordertot":$o.total, "list": $c3, "item1": $c3[0], "item1": $c3[?], "item2": $c3[1], "item5": $c3[5], "item10": $c3[10]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05.aql
new file mode 100644
index 0000000..5693312
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_order_q_05.adm";
+
+for $o in dataset('Orders')
+let $c1 := []
+let $c2 := {{}}
+return { "orderid": $o.oid, "ordertot":$o.total, "emptyorderedlist": $c1, "emptyunorderedlist": $c2, "olist_item1": $c1[0], "olist_item1": $c1[?], "olist_item5": $c1[4], "ulist_item1": $c2[?]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06.aql
new file mode 100644
index 0000000..70c317f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float,
+ items: [int32]
+}
+
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/custord_order_q_06.adm";
+
+for $o in dataset('Orders')
+let $c3 := {{$o.heList, $o.openlist}}
+return { "item1": $c3[?] }
diff --git a/asterix-app/src/test/resources/runtimets/queries/dapd/q1.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q1.aql
new file mode 100644
index 0000000..df75811
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dapd/q1.aql
@@ -0,0 +1,39 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+
+create type AddressType as closed {
+ street: string,
+ city: string,
+ zip: string,
+ latlong: point
+}
+
+create type UserType as open {
+ name: string,
+ email: string,
+ interests: {{string}},
+ address: AddressType,
+ member_of: {{
+ {
+ sig_id: int32,
+ chapter_name: string,
+ member_since: date
+ }
+ }}
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create external dataset User(UserType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/events/tiny/user.adm"),("format"="adm"));
+
+write output to nc1:"rttest/dapd_q1.adm";
+
+for $user in dataset('User')
+where some $i in $user.interests
+ satisfies $i = "movies"
+return {"name": $user.name}
diff --git a/asterix-app/src/test/resources/runtimets/queries/dapd/q2.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q2.aql
new file mode 100644
index 0000000..171fb02
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dapd/q2.aql
@@ -0,0 +1,56 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type AddressType as closed {
+ street: string,
+ city: string,
+ zip: string,
+ latlong: point
+}
+
+create type EventType as closed {
+ event_id: int32,
+ name: string,
+ location: AddressType ?,
+ organizers: {{
+ {
+ name: string
+ }
+ }},
+ sponsoring_sigs: [
+ {
+ sig_id: int32,
+ chapter_name: string
+ }
+ ],
+ interest_keywords: {{string}},
+ price: double?,
+ start_time: datetime,
+ end_time: datetime
+}
+
+
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create external dataset Event(EventType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/events/tiny/event.adm"),("format"="adm"));
+
+write output to nc1:"rttest/dapd_q2.adm";
+
+for $event in dataset('Event')
+for $sponsor in $event.sponsoring_sigs
+let $es := { "event": $event, "sponsor": $sponsor }
+group by $sig_id := $sponsor.sig_id with $es
+let $sig_sponsorship_count := count($es)
+let $by_chapter :=
+ for $e in $es
+ group by $chapter_name := $e.sponsor.chapter_name with $e
+ return { "chapter_name": $chapter_name, "escount" : count($e) }
+order by $sig_sponsorship_count desc
+limit 5
+return { "sig_id": $sig_id, "total_count": $sig_sponsorship_count, "chapter_breakdown": $by_chapter }
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/dapd/q3.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q3.aql
new file mode 100644
index 0000000..9c871b2
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dapd/q3.aql
@@ -0,0 +1,51 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+
+create type AddressType as closed {
+ street: string,
+ city: string,
+ zip: string,
+ latlong: point2d
+}
+
+create type UserType as open{
+ name: string,
+ interests: {{string}},
+ address: AddressType,
+ member_of: {{
+ {
+ sig_id: int32,
+ chapter_name: string,
+ member_since: date
+ }
+}}
+}
+
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset User(UserType)
+ partitioned by key name on group1;
+
+load dataset User
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/events/tiny/user.adm"),("format"="json")) pre-sorted;
+
+
+write output to nc1:'rttest/dapd_q3.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('User')
+let $similar_users :=
+ for $similar_user in dataset('User')
+ where $user.name != $similar_user.name
+ and $user.interests ~= $similar_user.interests
+ let $sim := similarity-jaccard($user.interests, $similar_user.interests)
+ order by $sim desc
+ limit 10
+ return { "user_name": $similar_user.name }
+order by $user.name
+return { "user_name" : $user.name, "similar_users" : $similar_users }
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/delete-with-index.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-with-index.aql
new file mode 100644
index 0000000..b1ad097
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/delete-with-index.aql
@@ -0,0 +1,43 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+create index idx_LineItem_partkey on LineItem(l_linenumber);
+create index idx_LineItem_suppkey on LineItem(l_suppkey);
+
+delete $l from dataset LineItem where $l.l_suppkey>=2 or $l.l_linenumber>1;
+
+write output to nc1:"rttest/dml_delete-with-index.adm";
+for $c in dataset('LineItem')
+where $c.l_suppkey<150
+order by $c.l_orderkey, $c.l_linenumber
+return $c
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/delete.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete.aql
new file mode 100644
index 0000000..cdd0315
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/delete.aql
@@ -0,0 +1,40 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+delete $l from dataset LineItem where $l.l_orderkey>=10;
+
+write output to nc1:"rttest/dml_delete.adm";
+for $c in dataset('LineItem')
+order by $c.l_orderkey, $c.l_linenumber
+return $c
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/insert-tuple-with-index.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-tuple-with-index.aql
new file mode 100644
index 0000000..fcc83d6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/insert-tuple-with-index.aql
@@ -0,0 +1,52 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineIDType as closed {
+ l_orderkey: int32,
+ l_linenumber: int32,
+ l_suppkey: int32
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineID(LineIDType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineID
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem_0.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+create index idx_LineID_partkey on LineID(l_linenumber);
+create index idx_LineID_suppkey on LineID(l_suppkey);
+
+insert into dataset LineID (
+let $x:=1
+let $y:=2
+let $z:=3
+return {
+ "l_orderkey": $x,
+ "l_partkey": $y,
+ "l_suppkey": $z
+}
+);
+
+insert into dataset LineID (
+let $x:=2
+let $y:=3
+let $z:=4
+return {
+ "l_orderkey": $x,
+ "l_partkey": $y,
+ "l_suppkey": $z
+}
+);
+
+
+write output to nc1:"rttest/dml_insert-tuple-with-index.adm";
+for $c in dataset('LineID')
+where $c.l_suppkey = 3 and $c.l_linenumber=2
+order by $c.l_orderkey, $c.l_linenumber
+return $c
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/insert-tuple.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-tuple.aql
new file mode 100644
index 0000000..731f7cd
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/insert-tuple.aql
@@ -0,0 +1,49 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineIDType as closed {
+ l_orderkey: int32,
+ l_linenumber: int32,
+ l_suppkey: int32
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineID(LineIDType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineID
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem_0.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+insert into dataset LineID (
+let $x:=1
+let $y:=2
+let $z:=3
+return {
+ "l_orderkey": $x,
+ "l_partkey": $y,
+ "l_suppkey": $z
+}
+);
+
+insert into dataset LineID (
+let $x:=2
+let $y:=3
+let $z:=4
+return {
+ "l_orderkey": $x,
+ "l_partkey": $y,
+ "l_suppkey": $z
+}
+);
+
+
+write output to nc1:"rttest/dml_insert-tuple.adm";
+for $c in dataset('LineID')
+where $c.l_suppkey < 100 and $c.l_linenumber<5
+order by $c.l_orderkey, $c.l_linenumber
+return $c
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/insert-wisc.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-wisc.aql
new file mode 100644
index 0000000..4e9e594
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/insert-wisc.aql
@@ -0,0 +1,55 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create type Schema as closed {
+unique1: int32,
+unique2: int32,
+two: int32,
+four: int32,
+ten: int32,
+twenty: int32,
+onePercent: int32,
+tenPercent: int32,
+twentyPercent: int32,
+fiftyPercent: int32,
+unique3: int32,
+evenOnePercent: int32,
+oddOnePercent: int32,
+stringu1: string,
+stringu2: string,
+string4: string
+}
+
+create dataset onektup(Schema) partitioned by key unique2 on group1;
+
+create dataset tenktup1(Schema) partitioned by key unique2 on group1;
+
+load dataset onektup
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/wisc/onektup.adm"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset tenktup1
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/wisc/tenktup.adm"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+create dataset tmp(Schema) partitioned by key unique2 on group1;
+
+load dataset tmp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/wisc/empty.adm"),("format"="adm")) pre-sorted;
+
+insert into dataset tmp(
+for $l in dataset('tenktup1')
+where $l.unique2 > 0 and $l.unique2 < 99
+return $l
+);
+
+write output to nc1:"rttest/dml_insert-wisc.adm";
+for $t in dataset('tmp')
+order by $t.unique2
+return $t
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/insert-with-index.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-with-index.aql
new file mode 100644
index 0000000..ec30668
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/insert-with-index.aql
@@ -0,0 +1,66 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: double,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type LineIDType as closed {
+ l_orderkey: int32,
+ l_linenumber: int32,
+ l_suppkey: int32
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+create dataset LineID(LineIDType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset LineID
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem_0.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+create index idx_LineID_partkey on LineID(l_linenumber);
+create index idx_LineID_suppkey on LineID(l_suppkey);
+
+insert into dataset LineID (
+for $l in dataset('LineItem')
+ where $l.l_orderkey<10
+ return {
+ "l_orderkey": $l.l_orderkey,
+ "l_partkey": $l.l_linenumber,
+ "l_suppkey": $l.l_partkey
+ }
+);
+
+write output to nc1:"rttest/dml_insert-with-index.adm";
+for $c in dataset('LineID')
+where $c.l_suppkey < 100 and $c.l_linenumber<5
+order by $c.l_orderkey, $c.l_linenumber
+return $c
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/insert.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert.aql
new file mode 100644
index 0000000..2123aa8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/insert.aql
@@ -0,0 +1,62 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: double,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type LineIDType as closed {
+ l_orderkey: int32,
+ l_linenumber: int32,
+ l_suppkey: int32
+}
+
+create nodegroup group1 if not exists on nc1;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+create dataset LineID(LineIDType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset LineID
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem_0.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+insert into dataset LineID (
+for $l in dataset('LineItem')
+ where $l.l_orderkey<10
+ return {
+ "l_orderkey": $l.l_orderkey,
+ "l_partkey": $l.l_linenumber,
+ "l_suppkey": $l.l_partkey
+ }
+);
+
+write output to nc1:"rttest/dml_insert.adm";
+for $c in dataset('LineID')
+order by $c.l_orderkey, $c.l_linenumber
+return $c
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc.aql
new file mode 100644
index 0000000..80cb4f5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc.aql
@@ -0,0 +1,62 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: double,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type LineIDType as closed {
+ l_orderkey: int32,
+ l_linenumber: int32,
+ l_suppkey: int32
+}
+
+create nodegroup group1nc2 if not exists on nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1nc2;
+
+create dataset LineID(LineIDType)
+ partitioned by key l_orderkey, l_linenumber on group1nc2;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset LineID
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem_0.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+insert into dataset LineID (
+for $l in dataset('LineItem')
+ where $l.l_orderkey<1000
+ return {
+ "l_orderkey": $l.l_orderkey,
+ "l_partkey": $l.l_linenumber,
+ "l_suppkey": $l.l_partkey
+ }
+);
+
+write output to nc1:"rttest/dml_insert_less_nc.adm";
+for $c in dataset('LineID')
+order by $c.l_orderkey, $c.l_linenumber
+return $c
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index.aql
new file mode 100644
index 0000000..bb2f934
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index.aql
@@ -0,0 +1,34 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as closed {
+ id: int32,
+ point: point,
+ kwds: string,
+ line1: line,
+ line2: line,
+ poly1: polygon,
+ poly2: polygon,
+ rec: rectangle
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset MyData(MyRecord)
+ partitioned by key id on group1;
+
+load dataset MyData
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm")) pre-sorted;
+
+create index rtree_index_point on MyData(point) type rtree;
+
+delete $m from dataset MyData where $m.id>10;
+
+write output to nc1:"rttest/dml_scan-delete-rtree-secondary-index.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.point, create-polygon(create-point(0.0,1.0), create-point(0.0,4.0), create-point(12.0,4.0), create-point(12.0,1.0)))
+order by $o.id
+return {"id":$o.id}
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index.aql
new file mode 100644
index 0000000..fe9c017
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index.aql
@@ -0,0 +1,55 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as closed {
+ id: int32,
+ point: point,
+ kwds: string,
+ line1: line,
+ line2: line,
+ poly1: polygon,
+ poly2: polygon,
+ rec: rectangle
+}
+
+create type MyMiniRecord as closed {
+ id: int32,
+ point: point
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset MyData(MyRecord)
+ partitioned by key id on group1;
+
+load dataset MyData
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm")) pre-sorted;
+
+
+create dataset MyMiniData(MyMiniRecord)
+ partitioned by key id on group1;
+
+load dataset MyMiniData
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData0.json"),("format"="adm")) pre-sorted;
+
+create index rtree_index_point_0 on MyData(point) type rtree;
+create index rtree_index_point on MyMiniData(point) type rtree;
+
+insert into dataset MyMiniData
+(
+ for $m in dataset('MyData')
+ return {
+ "id": $m.id,
+ "point": $m.point
+ }
+);
+
+write output to nc1:"rttest/dml_scan-insert-rtree-secondary-index.adm";
+
+for $o in dataset('MyMiniData')
+where spatial-intersect($o.point, create-polygon(create-point(0.0,1.0), create-point(0.0,4.0), create-point(12.0,4.0), create-point(12.0,1.0)))
+order by $o.id
+return {"id":$o.id}
diff --git a/asterix-app/src/test/resources/runtimets/queries/employee/q_01.aql b/asterix-app/src/test/resources/runtimets/queries/employee/q_01.aql
new file mode 100644
index 0000000..7c1df0f9
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/employee/q_01.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type EmpType as open {
+ id: int32,
+ name: string,
+ address: {
+ number: int32,
+ street: string,
+ city: string
+ },
+ age: int32?,
+ interests: {{string}}?,
+ children: [string]?
+}
+
+create external dataset Emp(EmpType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/employee.json"),("format"="adm"));
+
+write output to nc1:"rttest/employee_q_01.adm";
+
+for $e in dataset('Emp')
+return $e
diff --git a/asterix-app/src/test/resources/runtimets/queries/employee/q_02.aql b/asterix-app/src/test/resources/runtimets/queries/employee/q_02.aql
new file mode 100644
index 0000000..7cb1ee9
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/employee/q_02.aql
@@ -0,0 +1,28 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type EmpType as open {
+ id: int32,
+ name: string,
+ address: {
+ number: int32,
+ street: string,
+ city: string
+ },
+ age: int32?,
+ interests: {{string}}?,
+ children: [string]?
+}
+
+create external dataset Emp(EmpType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/employee.json"),("format"="adm"));
+
+write output to nc1:"rttest/employee_q_02.adm";
+
+for $e in dataset('Emp')
+let $m := [{"EmpName": $e.name, "parent_interest_1": $e.interests[?], "child1Name": $e.children[?], "child2Name": $e.children[1]}]
+return $m
diff --git a/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree.aql b/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree.aql
new file mode 100644
index 0000000..0ad2dde
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree.aql
@@ -0,0 +1,31 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as closed {
+ id: int32,
+ tweetid: int64,
+ loc: point,
+ time: datetime,
+ text: string
+}
+
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset MyData(MyRecord)
+ partitioned by key id on group1;
+
+load dataset MyData
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/twitter/smalltweets.txt"),("format"="adm")) pre-sorted;
+
+
+delete $l from dataset MyData where $l.id>=50 die after 1500;
+
+write output to nc1:"rttest/failure_delete-rtree.adm";
+
+for $o in dataset('MyData')
+order by $o.id
+return {"id":$o.id}
diff --git a/asterix-app/src/test/resources/runtimets/queries/failure/delete.aql b/asterix-app/src/test/resources/runtimets/queries/failure/delete.aql
new file mode 100644
index 0000000..cb51030
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/failure/delete.aql
@@ -0,0 +1,41 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+delete $l from dataset LineItem where $l.l_orderkey>=10 die after 1500;
+
+write output to nc1:"rttest/failure_delete.adm";
+for $c in dataset('LineItem')
+where $c.l_orderkey>=10
+order by $c.l_orderkey, $c.l_linenumber
+return $c
diff --git a/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree.aql b/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree.aql
new file mode 100644
index 0000000..ca4e910
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree.aql
@@ -0,0 +1,65 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as closed {
+ id: int32,
+ tweetid: int64,
+ loc: point,
+ time: datetime,
+ text: string
+}
+
+create type MyMiniRecord as closed {
+ id: int32,
+ loc: point
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset MyData(MyRecord)
+ partitioned by key id on group1;
+
+load dataset MyData
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/twitter/smalltweets.txt"),("format"="adm")) pre-sorted;
+
+
+create dataset MyMiniData(MyMiniRecord)
+ partitioned by key id on group1;
+
+load dataset MyMiniData
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData0.json"),("format"="adm")) pre-sorted;
+
+
+create index rtree_index_loc_0 on MyData(loc) type rtree;
+create index rtree_index_loc on MyMiniData(loc) type rtree;
+
+insert into dataset MyMiniData
+(
+ for $m in dataset('MyData')
+ where $m.id<1000
+ return {
+ "id": $m.id,
+ "loc": $m.loc
+ }
+);
+
+insert into dataset MyMiniData
+(
+ for $m in dataset('MyData')
+ where $m.id>=1000
+ die after 1000
+ return {
+ "id": $m.id,
+ "loc": $m.loc
+ }
+);
+
+write output to nc1:"rttest/failure_insert-rtree.adm";
+
+for $o in dataset('MyMiniData')
+order by $o.id
+return {"id":$o.id}
diff --git a/asterix-app/src/test/resources/runtimets/queries/failure/insert.aql b/asterix-app/src/test/resources/runtimets/queries/failure/insert.aql
new file mode 100644
index 0000000..570f4bc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/failure/insert.aql
@@ -0,0 +1,72 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: double,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type LineIDType as closed {
+ l_orderkey: int32,
+ l_linenumber: int32,
+ l_suppkey: int32
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+create dataset LineID(LineIDType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset LineID
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem_0.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+insert into dataset LineID (
+for $l in dataset('LineItem')
+ where $l.l_orderkey<1000
+ return {
+ "l_orderkey": $l.l_orderkey,
+ "l_partkey": $l.l_linenumber,
+ "l_suppkey": $l.l_partkey
+ }
+);
+
+insert into dataset LineID (
+for $l in dataset('LineItem')
+ where $l.l_orderkey>=1000
+ die after 1000
+ return {
+ "l_orderkey": $l.l_orderkey,
+ "l_partkey": $l.l_linenumber,
+ "l_suppkey": $l.l_partkey
+ }
+);
+
+write output to nc1:"rttest/failure_insert.adm";
+for $c in dataset('LineID')
+order by $c.l_orderkey, $c.l_linenumber
+return $c
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure.aql b/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure.aql
new file mode 100644
index 0000000..def6e9a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure.aql
@@ -0,0 +1,55 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: double,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create nodegroup group1 if not exists on nc1;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/failure_q1_pricing_summary_report_failure.adm";
+
+for $l in dataset('LineItem')
+//where inject-failure($l.l_shipdate <= '1998-09-02', $l.l_orderkey=5999)
+/*+ hash*/
+group by $l_returnflag := $l.l_returnflag, $l_linestatus := $l.l_linestatus
+ with $l
+order by $l_returnflag, $l_linestatus
+return {
+ "l_returnflag": $l_returnflag,
+ "l_linestatus": $l_linestatus,
+ "sum_qty": sum(for $i in $l return $i.l_quantity),
+ "sum_base_price": sum(for $i in $l return $i.l_extendedprice),
+ "sum_disc_price": sum(for $i in $l return $i.l_extendedprice * (1 - $i.l_discount)),
+ "sum_charge": sum(for $i in $l return $i.l_extendedprice * (1 - $i.l_discount) * (1 + $i.l_tax)),
+ "ave_qty": avg(for $i in $l return $i.l_quantity),
+ "ave_price": avg(for $i in $l return $i.l_extendedprice),
+ "ave_disc": avg(for $i in $l return $i.l_discount),
+ "count_order": count($l)
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/float_01.aql b/asterix-app/src/test/resources/runtimets/queries/float_01.aql
new file mode 100644
index 0000000..dea3790
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/float_01.aql
@@ -0,0 +1,8 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/float_01.adm";
+
+for $f in [1f, 1F, 1.1f, 1.1F, .1f, .1F]
+return $f
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1.aql
new file mode 100644
index 0000000..4409fec
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1.aql
@@ -0,0 +1,32 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-1_1.adm';
+
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1.aql
new file mode 100644
index 0000000..8deab14
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1.aql
@@ -0,0 +1,34 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as closed {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-1_2.1.1.adm';
+
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.aql
new file mode 100644
index 0000000..8a492ae
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.aql
@@ -0,0 +1,34 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-1_2.1.adm';
+
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.aql
new file mode 100644
index 0000000..68d26fe
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.aql
@@ -0,0 +1,33 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-1_2.adm';
+
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $paperid := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paperid
+ order by count($paperid), $tokenGroupped
+ return $tokenGroupped
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1.aql
new file mode 100644
index 0000000..f499ba3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1.aql
@@ -0,0 +1,54 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as closed {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2.1_5.3.1.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = /*+ bcast*/ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard($lenDBLP, .5f))
+ order by $idDBLP
+ return {'id': $idDBLP, 'prefixToken': $prefixTokenDBLP, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2.aql
new file mode 100644
index 0000000..ce8dae4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2.aql
@@ -0,0 +1,53 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as closed {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type TOKENSRANKEDADMType as closed {
+ token: int32,
+ rank: int32
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset TOKENSRANKEDADM(TOKENSRANKEDADMType) partitioned by key rank on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+load dataset TOKENSRANKEDADM
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/tokensranked.adm"),("format"="adm"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2.2.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked in dataset('TOKENSRANKEDADM')
+ where $tokenUnranked = /*+ bcast*/ $tokenRanked.token
+ order by $tokenRanked.rank
+ return $tokenRanked.rank
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+ order by $idDBLP, $prefixTokenDBLP
+ return {'id': $idDBLP, 'prefixToken': $prefixTokenDBLP, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1.aql
new file mode 100644
index 0000000..7328e60
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1.aql
@@ -0,0 +1,44 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2_1.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $tokensDBLP :=
+ for $tokenUnranked in counthashed-word-tokens($paperDBLP.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ order by $paperDBLP.id
+ return {'id': $paperDBLP.id, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2.aql
new file mode 100644
index 0000000..5c5cc8e8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2.aql
@@ -0,0 +1,45 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2_2.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $tokensDBLP :=
+ for $tokenUnranked in counthashed-word-tokens($paperDBLP.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ order by $paperDBLP.id
+ return {'id': $paperDBLP.id, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3.aql
new file mode 100644
index 0000000..6ffb2d5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3.aql
@@ -0,0 +1,46 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2_3.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensDBLP :=
+ for $tokenUnranked in counthashed-word-tokens($paperDBLP.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ order by $idDBLP
+ return {'id': $idDBLP, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4.aql
new file mode 100644
index 0000000..6a0a011
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4.aql
@@ -0,0 +1,47 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2_4.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ order by $idDBLP
+ return {'id': $idDBLP, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1.aql
new file mode 100644
index 0000000..7d3e144
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1.aql
@@ -0,0 +1,49 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2_5.1.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ order by $idDBLP
+ return {'id': $idDBLP, 'len': $lenDBLP, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2.aql
new file mode 100644
index 0000000..f69e98f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2.aql
@@ -0,0 +1,49 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2_5.2.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast*/ $tokenRanked
+ order by $i
+ return $i
+ order by $idDBLP
+ return {'id': $idDBLP, 'len': $lenDBLP, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1.aql
new file mode 100644
index 0000000..ec9726d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1.aql
@@ -0,0 +1,50 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as closed {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2_5.3.1.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast*/ $tokenRanked
+ order by $i
+ return $i
+ order by $idDBLP
+ return {'id': $idDBLP, 'len': $lenDBLP, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.aql
new file mode 100644
index 0000000..a0b3011
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.aql
@@ -0,0 +1,50 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2_5.3.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast*/ $tokenRanked
+ order by $i
+ return $i
+ order by $idDBLP
+ return {'id': $idDBLP, 'len': $lenDBLP, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.aql
new file mode 100644
index 0000000..6c5e1ac
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.aql
@@ -0,0 +1,48 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-2_5.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ order by $idDBLP
+ return {'id': $idDBLP, 'len': $lenDBLP, 'tokens': $tokensDBLP}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1.aql
new file mode 100644
index 0000000..e871290
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1.aql
@@ -0,0 +1,94 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-3_1.1.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperLeft in dataset('DBLP')
+ let $lenLeft := len(counthashed-word-tokens($paperLeft.title))
+ let $tokensLeft :=
+ for $tokenUnranked in counthashed-word-tokens($paperLeft.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenLeft in subset-collection(
+ $tokensLeft,
+ 0,
+ prefix-len-jaccard($lenLeft, .5f))
+
+ for $paperRight in dataset('DBLP')
+ let $lenRight := len(counthashed-word-tokens($paperRight.title))
+ let $tokensRight :=
+ for $tokenUnranked in counthashed-word-tokens($paperRight.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenRight in subset-collection(
+ $tokensRight,
+ 0,
+ prefix-len-jaccard($lenRight, .5f))
+
+ where $prefixTokenLeft = $prefixTokenRight
+
+ let $sim := similarity-jaccard-prefix(
+ $lenLeft,
+ $tokensLeft,
+ $lenRight,
+ $tokensRight,
+ $prefixTokenLeft,
+ .5f)
+ where $sim >= .5f and $paperLeft.id < $paperRight.id
+ /*+ hash */
+ group by $idLeft := $paperLeft.id, $idRight := $paperRight.id with $sim
+ return {'idLeft': $idLeft, 'idRight': $idRight, 'sim': $sim[0]}
+
+for $paperLeft in dataset('DBLP')
+for $paperRight in dataset('DBLP')
+where $ridpair.idLeft = $paperLeft.id and $ridpair.idRight = $paperRight.id
+order by $paperLeft.id, $paperRight.id
+return {'left': $paperLeft, 'right': $paperRight, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2.aql
new file mode 100644
index 0000000..d1d65dc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2.aql
@@ -0,0 +1,94 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-3_1.2.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperLeft in dataset('DBLP')
+ let $lenLeft := len(counthashed-word-tokens($paperLeft.title))
+ let $tokensLeft :=
+ for $tokenUnranked in counthashed-word-tokens($paperLeft.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenLeft in subset-collection(
+ $tokensLeft,
+ 0,
+ prefix-len-jaccard($lenLeft, .5f))
+
+ for $paperRight in dataset('DBLP')
+ let $lenRight := len(counthashed-word-tokens($paperRight.title))
+ let $tokensRight :=
+ for $tokenUnranked in counthashed-word-tokens($paperRight.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenRight in subset-collection(
+ $tokensRight,
+ 0,
+ prefix-len-jaccard($lenRight, .5f))
+
+ where $prefixTokenLeft = $prefixTokenRight
+
+ let $sim := similarity-jaccard-prefix(
+ $lenLeft,
+ $tokensLeft,
+ $lenRight,
+ $tokensRight,
+ $prefixTokenLeft,
+ .5f)
+ where $sim >= .5f and $paperLeft.id < $paperRight.id
+ /*+ hash */
+ group by $idLeft := $paperLeft.id, $idRight := $paperRight.id with $sim
+ return {'idLeft': $idLeft, 'idRight': $idRight, 'sim': $sim[0]}
+
+for $paperLeft in dataset('DBLP')
+for $paperRight in dataset('DBLP')
+where $ridpair.idLeft = $paperLeft.id and $ridpair.idRight = $paperRight.id
+order by $paperLeft.id, $paperRight.id
+return {'left': $paperLeft, 'right': $paperRight, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.aql
new file mode 100644
index 0000000..eea456e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.aql
@@ -0,0 +1,91 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-3_1.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $paperLeft in dataset('DBLP')
+for $paperRight in dataset('DBLP')
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperLeft in dataset('DBLP')
+ let $lenLeft := len(counthashed-word-tokens($paperLeft.title))
+ let $tokensLeft :=
+ for $tokenUnranked in counthashed-word-tokens($paperLeft.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenLeft in subset-collection(
+ $tokensLeft,
+ 0,
+ prefix-len-jaccard($lenLeft, .5f))
+
+ for $paperRight in dataset('DBLP')
+ let $lenRight := len(counthashed-word-tokens($paperRight.title))
+ let $tokensRight :=
+ for $tokenUnranked in counthashed-word-tokens($paperRight.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenRight in subset-collection(
+ $tokensRight,
+ 0,
+ prefix-len-jaccard($lenRight, .5f))
+
+ where $prefixTokenLeft = $prefixTokenRight
+
+ let $sim := similarity-jaccard-prefix(
+ $lenLeft,
+ $tokensLeft,
+ $lenRight,
+ $tokensRight,
+ $prefixTokenLeft,
+ .5f)
+ where $sim >= .5f and $paperLeft.id < $paperRight.id
+ group by $idLeft := $paperLeft.id, $idRight := $paperRight.id with $sim
+ return {'idLeft': $idLeft, 'idRight': $idRight, 'sim': $sim[0]}
+
+where $ridpair.idLeft = $paperLeft.id and $ridpair.idRight = $paperRight.id
+order by $paperLeft.id, $paperRight.id
+return {'left': $paperLeft, 'right': $paperRight, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1.aql
new file mode 100644
index 0000000..089fc47
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1.aql
@@ -0,0 +1,29 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as closed {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP from nc1:'data/pub-small/dblp-small-id.txt' delimited by ':';
+
+write output to nc1:'rttest/fuzzyjoin_dblp-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $dblp in dataset('DBLP')
+for $dblp2 in dataset('DBLP')
+where $dblp.title ~= $dblp2.title and $dblp.id < $dblp2.id
+order by $dblp.id, $dblp2.id
+return {'dblp': $dblp, 'dblp2': $dblp2}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1.aql
new file mode 100644
index 0000000..a5bb9cd
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1.aql
@@ -0,0 +1,93 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-2_1.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $tokensDBLP :=
+ for $tokenUnranked in counthashed-word-tokens($paperDBLP.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $tokensCSX :=
+ for $tokenUnranked in counthashed-word-tokens($paperCSX.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ len(counthashed-word-tokens($paperDBLP.title)),
+ $tokensDBLP,
+ len(counthashed-word-tokens($paperCSX.title)),
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $paperDBLP.id, $idCSX := $paperCSX.id, $sim := $sim with $sim
+ order by $idDBLP, $idCSX
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2.aql
new file mode 100644
index 0000000..fab6877
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2.aql
@@ -0,0 +1,95 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-2_2.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $tokensDBLP :=
+ for $tokenUnranked in counthashed-word-tokens($paperDBLP.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $tokensCSX :=
+ for $tokenUnranked in counthashed-word-tokens($paperCSX.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ len(counthashed-word-tokens($paperDBLP.title)),
+ $tokensDBLP,
+ len(counthashed-word-tokens($paperCSX.title)),
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $paperDBLP.id, $idCSX := $paperCSX.id, $sim := $sim with $sim
+ order by $idDBLP, $idCSX
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3.aql
new file mode 100644
index 0000000..34654e3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3.aql
@@ -0,0 +1,98 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-2_3.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensDBLP :=
+ for $tokenUnranked in counthashed-word-tokens($paperDBLP.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensCSX :=
+ for $tokenUnranked in counthashed-word-tokens($paperCSX.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ len(counthashed-word-tokens($paperDBLP.title)),
+ $tokensDBLP,
+ len(counthashed-word-tokens($paperCSX.title)),
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX, $sim := $sim with $sim
+ order by $idDBLP, $idCSX
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4.aql
new file mode 100644
index 0000000..f2ad20d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4.aql
@@ -0,0 +1,99 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-2_4.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ len($tokensUnrankedDBLP),
+ $tokensDBLP,
+ len($tokensUnrankedCSX),
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX, $sim := $sim with $sim
+ order by $idDBLP, $idCSX
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1.aql
new file mode 100644
index 0000000..c5d4b73
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1.aql
@@ -0,0 +1,103 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-2_5.1.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX with $sim
+ order by $idDBLP, $idCSX
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2.aql
new file mode 100644
index 0000000..b272e34
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2.aql
@@ -0,0 +1,104 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-2_5.2.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ /*+ hash*/
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX with $sim
+ order by $idDBLP, $idCSX
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1.aql
new file mode 100644
index 0000000..fd58328
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1.aql
@@ -0,0 +1,107 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as closed {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as closed {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-2_5.3.1.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ /*+ hash*/
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX, $sim := $sim with $sim
+ order by $idDBLP, $idCSX
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.aql
new file mode 100644
index 0000000..a52183f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.aql
@@ -0,0 +1,106 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-2_5.3.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ /*+ hash*/
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX with $sim
+ order by $idDBLP, $idCSX
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.aql
new file mode 100644
index 0000000..7ccdc0c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.aql
@@ -0,0 +1,101 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-2_5.adm';
+
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX, $sim := $sim with $sim
+ order by $idDBLP, $idCSX
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1.aql
new file mode 100644
index 0000000..b22d355
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1.aql
@@ -0,0 +1,103 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_1.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $tokensDBLP :=
+ for $tokenUnranked in counthashed-word-tokens($paperDBLP.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $tokensCSX :=
+ for $tokenUnranked in counthashed-word-tokens($paperCSX.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ len(counthashed-word-tokens($paperDBLP.title)),
+ $tokensDBLP,
+ len(counthashed-word-tokens($paperCSX.title)),
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $paperDBLP.id, $idCSX := $paperCSX.id, $sim := $sim with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+for $paperDBLP in dataset('DBLP')
+for $paperCSX in dataset('CSX')
+where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
+order by $paperDBLP.id, $paperCSX.id
+return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2.aql
new file mode 100644
index 0000000..5dc2cad
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2.aql
@@ -0,0 +1,104 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_2.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $tokensDBLP :=
+ for $tokenUnranked in counthashed-word-tokens($paperDBLP.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $tokensCSX :=
+ for $tokenUnranked in counthashed-word-tokens($paperCSX.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ len(counthashed-word-tokens($paperDBLP.title)),
+ $tokensDBLP,
+ len(counthashed-word-tokens($paperCSX.title)),
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $paperDBLP.id, $idCSX := $paperCSX.id, $sim := $sim with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+for $paperDBLP in dataset('DBLP')
+for $paperCSX in dataset('CSX')
+where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
+order by $paperDBLP.id, $paperCSX.id
+return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3.aql
new file mode 100644
index 0000000..0ce00ca
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3.aql
@@ -0,0 +1,106 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_3.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensDBLP :=
+ for $tokenUnranked in counthashed-word-tokens($paperDBLP.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensCSX :=
+ for $tokenUnranked in counthashed-word-tokens($paperCSX.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ len(counthashed-word-tokens($paperDBLP.title)),
+ $tokensDBLP,
+ len(counthashed-word-tokens($paperCSX.title)),
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX, $sim := $sim with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+for $paperDBLP in dataset('DBLP')
+for $paperCSX in dataset('CSX')
+where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
+order by $paperDBLP.id, $paperCSX.id
+return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4.aql
new file mode 100644
index 0000000..ac683c8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4.aql
@@ -0,0 +1,108 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_4.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ len($tokensUnrankedDBLP),
+ $tokensDBLP,
+ len($tokensUnrankedCSX),
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX, $sim := $sim with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+for $paperDBLP in dataset('DBLP')
+for $paperCSX in dataset('CSX')
+where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
+order by $paperDBLP.id, $paperCSX.id
+return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1.aql
new file mode 100644
index 0000000..fd6ad95
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1.aql
@@ -0,0 +1,112 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_5.1.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+for $paperDBLP in dataset('DBLP')
+for $paperCSX in dataset('CSX')
+where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
+order by $paperDBLP.id, $paperCSX.id
+return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2.aql
new file mode 100644
index 0000000..cc49092
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2.aql
@@ -0,0 +1,113 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_5.2.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ /*+ hash*/
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+for $paperDBLP in dataset('DBLP')
+for $paperCSX in dataset('CSX')
+where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
+order by $paperDBLP.id, $paperCSX.id
+return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1.aql
new file mode 100644
index 0000000..66fb57e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1.aql
@@ -0,0 +1,115 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_5.3.1.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ /*+ hash*/
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+for $paperDBLP in dataset('DBLP')
+for $paperCSX in dataset('CSX')
+where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
+order by $paperDBLP.id, $paperCSX.id
+return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.aql
new file mode 100644
index 0000000..93545b3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.aql
@@ -0,0 +1,115 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_5.3.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGroupped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ /*+ hash*/
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX, $sim := $sim with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+for $paperDBLP in dataset('DBLP')
+for $paperCSX in dataset('CSX')
+where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
+order by $paperDBLP.id, $paperCSX.id
+return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1.aql
new file mode 100644
index 0000000..9782508
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1.aql
@@ -0,0 +1,119 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_5.4.1.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $paperCSX in dataset('CSX')
+for $paperDBLPridpair in
+for $paperDBLP in dataset('DBLP')
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ /*+ hash*/
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+where $ridpair.idDBLP = $paperDBLP.id
+return {'idDBLP': $paperDBLP.id, 'idCSX': $ridpair.idCSX, 'paperDBLP': $paperDBLP, 'sim': $ridpair.sim}
+
+where $paperDBLPridpair.idCSX = $paperCSX.id
+order by $paperDBLPridpair.idDBLP, $paperDBLPridpair.idCSX
+return {'dblp': $paperDBLPridpair.paperDBLP, 'csx': $paperCSX, 'sim': $paperDBLPridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.aql
new file mode 100644
index 0000000..cb5b8ba
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.aql
@@ -0,0 +1,120 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_5.4.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $paperCSX in dataset('CSX')
+for $paperDBLPridpair in
+for $paperDBLP in dataset('DBLP')
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ /*+ hash */
+ group by $tokenGrouped := $token with $id
+ /*+ inmem 1 302 */
+ order by count($id), $tokenGrouped
+ return $tokenGrouped
+ where $tokenUnranked = /*+ bcast */ $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ /*+ hash*/
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+where $ridpair.idDBLP = $paperDBLP.id
+return {'idDBLP': $paperDBLP.id, 'paperDBLP': $paperDBLP, 'idCSX': $ridpair.idCSX, 'sim': $ridpair.sim}
+
+where $paperDBLPridpair.idCSX = $paperCSX.id
+// order by $paperDBLPridpair.idDBLP, $paperDBLPridpair.idCSX
+order by $paperDBLPridpair.paperDBLP.id, $paperDBLPridpair.idCSX
+return {'dblp': $paperDBLPridpair.paperDBLP, 'csx': $paperCSX, 'sim': $paperDBLPridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.aql
new file mode 100644
index 0000000..0f1f2fe
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.aql
@@ -0,0 +1,111 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+load dataset CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_5.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperDBLP in dataset('DBLP')
+ let $idDBLP := $paperDBLP.id
+ let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
+ let $lenDBLP := len($tokensUnrankedDBLP)
+ let $tokensDBLP :=
+ for $tokenUnranked in $tokensUnrankedDBLP
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenDBLP in subset-collection(
+ $tokensDBLP,
+ 0,
+ prefix-len-jaccard(len($tokensDBLP), .5f))
+
+ for $paperCSX in dataset('CSX')
+ let $idCSX := $paperCSX.id
+ let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
+ let $lenCSX := len($tokensUnrankedCSX)
+ let $tokensCSX :=
+ for $tokenUnranked in $tokensUnrankedCSX
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ let $id := $paper.id
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $id
+ order by count($id), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenCSX in subset-collection(
+ $tokensCSX,
+ 0,
+ prefix-len-jaccard(len($tokensCSX), .5f))
+
+ where $prefixTokenDBLP = $prefixTokenCSX
+
+ let $sim := similarity-jaccard-prefix(
+ $lenDBLP,
+ $tokensDBLP,
+ $lenCSX,
+ $tokensCSX,
+ $prefixTokenDBLP,
+ .5f)
+ where $sim >= .5f
+ group by $idDBLP := $idDBLP, $idCSX := $idCSX, $sim := $sim with $sim
+ return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}
+
+for $paperDBLP in dataset('DBLP')
+for $paperCSX in dataset('CSX')
+where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
+order by $paperDBLP.id, $paperCSX.id
+return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1.aql
new file mode 100644
index 0000000..ead8e81
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1.aql
@@ -0,0 +1,39 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP from nc1:'data/pub-small/dblp-small-id.txt' delimited by ':';
+load dataset CSX from nc1:'data/pub-small/csx-small-id.txt' delimited by ':';
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $i in dataset('DBLP')
+for $j in dataset('CSX')
+where $i.title ~= $j.title
+order by $i.id, $j.id
+return {'dblp': $i, 'csx': $j}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2.aql
new file mode 100644
index 0000000..611fd29
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2.aql
@@ -0,0 +1,39 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP from nc1:'data/pub-small/dblp-small-id.txt' delimited by ':';
+load dataset CSX from nc1:'data/pub-small/csx-small-id.txt' delimited by ':';
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-aqlplus_2.adm';
+
+set simthreshold '.5f';
+
+for $csx in dataset('CSX')
+for $dblp in dataset('DBLP')
+where $dblp.title ~= $csx.title
+order by $dblp.id, $csx.id
+return {'dblp': $dblp, 'csx': $csx}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3.aql
new file mode 100644
index 0000000..e6dc1ed
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3.aql
@@ -0,0 +1,39 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP from nc1:'data/pub-small/dblp-small-id.txt' delimited by ':';
+load dataset CSX from nc1:'data/pub-small/csx-small-id.txt' delimited by ':';
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-aqlplus_3.adm';
+
+set simthreshold '.5f';
+
+for $dblp in dataset('DBLP')
+for $csx in dataset('CSX')
+where $csx.title ~= $dblp.title
+order by $dblp.id, $csx.id
+return {'dblp': $dblp, 'csx': $csx}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1.aql
new file mode 100644
index 0000000..e1b53d3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1.aql
@@ -0,0 +1,40 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create type CSXType as open {
+ id: int32,
+ csxid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+create dataset CSX(CSXType) partitioned by key id on group1;
+
+load dataset DBLP from nc1:'data/pub-small/dblp-small-id.txt' delimited by ':';
+load dataset CSX from nc1:'data/pub-small/csx-small-id.txt' delimited by ':';
+
+write output to nc1:'rttest/fuzzyjoin_dblp-csx-dblp-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $dblp in dataset('DBLP')
+for $csx in dataset('CSX')
+for $dblp2 in dataset('DBLP')
+where $dblp.title ~= $csx.title and $csx.authors ~= $dblp2.authors
+order by $dblp.id, $csx.id, $dblp2.id
+return {'dblp': $dblp, 'csx': $csx, 'dblp2': $dblp2}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1.aql
new file mode 100644
index 0000000..a235756
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1.aql
@@ -0,0 +1,29 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset DBLP(DBLPType) partitioned by key id on group1;
+
+load dataset DBLP
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+
+write output to nc1:'rttest/fuzzyjoin_dblp-lookup_1.adm';
+
+for $paper in dataset('DBLP')
+where $paper.id = 1
+return $paper
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1.aql
new file mode 100644
index 0000000..68800dd
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1.aql
@@ -0,0 +1,166 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create external dataset DBLP(DBLPType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+
+write output to nc1:'rttest/fuzzyjoin_dblp-splits-3_1.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $paperLeft in dataset('DBLP')
+ let $lenLeft := len(counthashed-word-tokens($paperLeft.title))
+ let $tokensLeft :=
+ for $tokenUnranked in counthashed-word-tokens($paperLeft.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefix_tokenLeft in subset-collection(
+ $tokensLeft,
+ 0,
+ prefix-len-jaccard(len($tokensLeft), .5f))
+
+ for $paperRight in dataset('DBLP')
+ let $lenRight := len(counthashed-word-tokens($paperRight.title))
+ let $tokensRight :=
+ for $tokenUnranked in counthashed-word-tokens($paperRight.title)
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $paper in dataset('DBLP')
+ for $token in counthashed-word-tokens($paper.title)
+ group by $tokenGroupped := $token with $paper
+ order by count($paper), $tokenGroupped
+ return $tokenGroupped
+ where $tokenUnranked = $tokenRanked
+ order by $i
+ return $i
+ for $prefix_tokenRight in subset-collection(
+ $tokensRight,
+ 0,
+ prefix-len-jaccard(len($tokensRight), .5f))
+
+ where $prefix_tokenLeft = $prefix_tokenRight
+
+ let $sim := similarity-jaccard-prefix(
+ $lenLeft,
+ $tokensLeft,
+ $lenRight,
+ $tokensRight,
+ $prefix_tokenLeft,
+ .5f)
+ where $sim >= .5f and $paperLeft.id < $paperRight.id
+ group by $idLeft := $paperLeft.id, $idRight := $paperRight.id with $sim
+ return {'idLeft': $idLeft, 'idRight': $idRight, 'sim': $sim[0]}
+
+for $paperLeft in dataset('DBLP')
+for $paperRight in dataset('DBLP')
+where $ridpair.idLeft = $paperLeft.id and $ridpair.idRight = $paperRight.id
+order by $paperLeft.id, $paperRight.id
+return {'left': $paperLeft, 'right': $paperRight, 'sim': $ridpair.sim}
+
+/*
+edu.uci.ics.aqua.common.exceptions.AquaException: Attempting to construct a nested plan with 3 operator descriptors. Currently, nested plans can only consist in linear pipelines of Asterix micro operators.
+ at edu.uci.ics.aqua.algebra.operators.physical.AbstractGroupByPhysicalOperator.buildPipelineWithProjection(AbstractGroupByPhysicalOperator.java:47)
+ at edu.uci.ics.aqua.algebra.operators.physical.AbstractGroupByPhysicalOperator.compileSubplans(AbstractGroupByPhysicalOperator.java:29)
+ at edu.uci.ics.aqua.algebra.operators.physical.PreSortedGroupByPOperator.contributeRuntimeOperator(PreSortedGroupByPOperator.java:133)
+ at edu.uci.ics.aqua.algebra.operators.logical.AbstractLogicalOperator.contributeRuntimeOperator(AbstractLogicalOperator.java:208)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:52)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compileOpRef(PlanCompiler.java:44)
+ at edu.uci.ics.aqua.jobgen.impl.PlanCompiler.compilePlan(PlanCompiler.java:30)
+ at edu.uci.ics.aqua.api.HeuristicCompilerFactoryBuilder$1$1.createJob(HeuristicCompilerFactoryBuilder.java:64)
+ at edu.uci.ics.asterix.api.common.APIFramework.compileQuery(APIFramework.java:323)
+ at edu.uci.ics.asterix.api.java.AsterixJavaClient.compile(AsterixJavaClient.java:71)
+ at edu.uci.ics.asterix.test.runtime.functions.RuntimeFunctionsTest.test(RuntimeFunctionsTest.java:150)
+ at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+ at java.lang.reflect.Method.invoke(Method.java:597)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
+ at org.junit.runners.Suite.runChild(Suite.java:128)
+ at org.junit.runners.Suite.runChild(Suite.java:24)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
+ at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
+ at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
+ at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
+ at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
+ at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
+ at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
+
+*/
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1.aql
new file mode 100644
index 0000000..6093823
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1.aql
@@ -0,0 +1,44 @@
+drop dataverse fuzzyjoin if exists;
+create dataverse fuzzyjoin;
+use dataverse fuzzyjoin;
+
+
+create type AddressType as closed {
+ street: string,
+ city: string,
+ zip: string,
+ latlong: point
+}
+
+create type UserType as open{
+ name: string,
+ interests: <string>,
+ address: AddressType,
+ member_of: <
+ {
+ sig_id: int32,
+ chapter_name: string,
+ member_since: date
+ }
+>
+}
+
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset User(UserType)
+ partitioned by key name on group1;
+load dataset User from nc1:'data/events/tiny/user.adm';
+
+write output to nc1:'rttest/fuzzyjoin_events-users-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('User')
+let $similar_users :=
+ for $similar_user in dataset('User')
+ where $user.interests ~= $similar_user.interests
+ order by $similar_user.name
+ return { "user_name": $similar_user.name }
+order by $user.name
+return { "user_name": $user.name, "similar_users": $similar_users }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1.aql
new file mode 100644
index 0000000..7e4ab38
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1.aql
@@ -0,0 +1,26 @@
+drop dataverse fuzzyjoin if exists;
+create dataverse fuzzyjoin;
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-int-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $user2 in dataset('Users')
+where $user.interests ~= $user2.interests and $user.uid < $user2.uid
+order by $user.uid, $user2.uid
+return { 'user': $user, 'user2': $user2 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2.aql
new file mode 100644
index 0000000..d1e49a0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2.aql
@@ -0,0 +1,26 @@
+drop dataverse fuzzyjoin if exists;
+create dataverse fuzzyjoin;
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-int-aqlplus_2.adm';
+
+set simthreshold '.5f';
+
+for $user2 in dataset('Users')
+for $user in dataset('Users')
+where $user.interests ~= $user2.interests and $user.uid < $user2.uid
+order by $user.uid, $user2.uid
+return { 'user': $user, 'user2': $user2 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3.aql
new file mode 100644
index 0000000..bf15bf6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3.aql
@@ -0,0 +1,26 @@
+drop dataverse fuzzyjoin if exists;
+create dataverse fuzzyjoin;
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-int-aqlplus_3.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $user2 in dataset('Users')
+where $user2.interests ~= $user.interests and $user.uid < $user2.uid
+order by $user.uid, $user2.uid
+return { 'user': $user, 'user2': $user2 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1.aql
new file mode 100644
index 0000000..ccdd07f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1.aql
@@ -0,0 +1,27 @@
+drop dataverse fuzzyjoin if exists;
+create dataverse fuzzyjoin;
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-lot-aqlplus_1.1.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $user2 in dataset('Users')
+where $user.lottery_numbers ~= $user2.lottery_numbers and $user.uid < $user2.uid
+let $sim := similarity-jaccard($user.lottery_numbers, $user2.lottery_numbers)
+order by $sim desc, $user.uid, $user2.uid limit 3
+return { 'user': $user, 'user2': $user2, 'sim': $sim }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.aql
new file mode 100644
index 0000000..3b4a6fe
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.aql
@@ -0,0 +1,26 @@
+drop dataverse fuzzyjoin if exists;
+create dataverse fuzzyjoin;
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-lot-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $user2 in dataset('Users')
+where $user.lottery_numbers ~= $user2.lottery_numbers and $user.uid < $user2.uid
+order by $user.uid, $user2.uid
+return { 'user': $user, 'user2': $user2 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2.aql
new file mode 100644
index 0000000..3e970c7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2.aql
@@ -0,0 +1,26 @@
+drop dataverse fuzzyjoin if exists;
+create dataverse fuzzyjoin;
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-lot-aqlplus_2.adm';
+
+set simthreshold '.5f';
+
+for $user2 in dataset('Users')
+for $user in dataset('Users')
+where $user.lottery_numbers ~= $user2.lottery_numbers and $user.uid < $user2.uid
+order by $user.uid, $user2.uid
+return { 'user': $user, 'user2': $user2 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3.aql
new file mode 100644
index 0000000..1979ba1
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3.aql
@@ -0,0 +1,26 @@
+drop dataverse fuzzyjoin if exists;
+create dataverse fuzzyjoin;
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-lot-aqlplus_3.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $user2 in dataset('Users')
+where $user2.lottery_numbers ~= $user.lottery_numbers and $user.uid < $user2.uid
+order by $user.uid, $user2.uid
+return { 'user': $user, 'user2': $user2 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1.aql
new file mode 100644
index 0000000..abbb66a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1.aql
@@ -0,0 +1,103 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: {{string}}
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: {{string}}
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+
+load dataset Users
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/users-visitors-small/users.json"),("format"="adm"));
+
+load dataset Visitors
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/users-visitors-small/visitors.json"),("format"="adm"));
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-int-3_1.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $user in dataset('Users')
+ let $lenUser := len($user.interests)
+ let $tokensUser :=
+ for $token in $user.interests
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $user in dataset('Users')
+ for $token in $user.interests
+ group by $tokenGroupped := $token with $user
+ order by count($user), $tokenGroupped
+ return $tokenGroupped
+ where $token = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenUser in subset-collection(
+ $tokensUser,
+ 0,
+ prefix-len-jaccard($lenUser, .5f))
+
+ for $visitor in dataset('Visitors')
+ let $lenVisitor := len($visitor.interests)
+ let $tokensVisitor :=
+ for $token in $visitor.interests
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $user in dataset('Users')
+ for $token in $user.interests
+ group by $tokenGroupped := $token with $user
+ order by count($user), $tokenGroupped
+ return $tokenGroupped
+ where $token = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenVisitor in subset-collection(
+ $tokensVisitor,
+ 0,
+ prefix-len-jaccard($lenVisitor, .5f))
+
+ where $prefixTokenUser = $prefixTokenVisitor
+
+ let $sim := similarity-jaccard-prefix(
+ $lenUser,
+ $tokensUser,
+ $lenVisitor,
+ $tokensVisitor,
+ $prefixTokenUser,
+ .5f)
+ where $sim >= .5f
+ group by $uid := $user.uid, $vid := $visitor.vid with $sim
+ return {'uid': $uid, 'vid': $vid, 'sim': $sim[0]}
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $ridpair.uid = $user.uid and $ridpair.vid = $visitor.vid
+order by $user.uid, $visitor.vid
+return {'user': $user, 'visitor': $visitor, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1.aql
new file mode 100644
index 0000000..1a676c5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1.aql
@@ -0,0 +1,37 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-int-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $user.interests ~= $visitor.interests
+order by $user.uid, $visitor.vid
+return { 'user': $user, 'visitor': $visitor }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2.aql
new file mode 100644
index 0000000..1e6e417
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2.aql
@@ -0,0 +1,37 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-int-aqlplus_2.adm';
+
+set simthreshold '.5f';
+
+for $visitor in dataset('Visitors')
+for $user in dataset('Users')
+where $user.interests ~= $visitor.interests
+order by $user.uid, $visitor.vid
+return { 'user': $user, 'visitor': $visitor }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3.aql
new file mode 100644
index 0000000..2d39bd4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3.aql
@@ -0,0 +1,37 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-int-aqlplus_3.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $visitor.interests ~= $user.interests
+order by $user.uid, $visitor.vid
+return { 'user': $user, 'visitor': $visitor }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1.aql
new file mode 100644
index 0000000..4561a7a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1.aql
@@ -0,0 +1,38 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-int-vis-user-lot-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+for $user2 in dataset('Users')
+where $user.interests ~= $visitor.interests and $visitor.lottery_numbers ~= $user2.lottery_numbers
+order by $user.uid, $visitor.vid, $user2.uid
+return {'user': $user, 'visitor': $visitor, 'user2': $user2}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1.aql
new file mode 100644
index 0000000..4de46a5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1.aql
@@ -0,0 +1,102 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: {{string}}
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: {{string}}
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/users-visitors-small/users.json"),("format"="adm"));
+
+load dataset Visitors
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/users-visitors-small/visitors.json"),("format"="adm"));
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-lot-3_1.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in
+ //
+ // -- - Stage 2 - --
+ //
+ for $user in dataset('Users')
+ let $lenUser := len($user.lottery_numbers)
+ let $tokensUser :=
+ for $token in $user.lottery_numbers
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $user in dataset('Users')
+ for $token in $user.lottery_numbers
+ group by $tokenGroupped := $token with $user
+ order by count($user)
+ return $tokenGroupped
+ where $token = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenUser in subset-collection(
+ $tokensUser,
+ 0,
+ prefix-len-jaccard($lenUser, .5f))
+
+ for $visitor in dataset('Visitors')
+ let $lenVisitor := len($visitor.lottery_numbers)
+ let $tokensVisitor :=
+ for $token in $visitor.lottery_numbers
+ for $tokenRanked at $i in
+ //
+ // -- - Stage 1 - --
+ //
+ for $user in dataset('Users')
+ for $token in $user.lottery_numbers
+ group by $tokenGroupped := $token with $user
+ order by count($user)
+ return $tokenGroupped
+ where $token = $tokenRanked
+ order by $i
+ return $i
+ for $prefixTokenVisitor in subset-collection(
+ $tokensVisitor,
+ 0,
+ prefix-len-jaccard($lenVisitor, .5f))
+
+ where $prefixTokenUser = $prefixTokenVisitor
+
+ let $sim := similarity-jaccard-prefix(
+ $lenUser,
+ $tokensUser,
+ $lenVisitor,
+ $tokensVisitor,
+ $prefixTokenUser,
+ .5f)
+ where $sim >= .5f
+ group by $uid := $user.uid, $vid := $visitor.vid with $sim
+ return {'uid': $uid, 'vid': $vid, 'sim': $sim[0]}
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $ridpair.uid = $user.uid and $ridpair.vid = $visitor.vid
+order by $user.uid, $visitor.vid
+return {'user': $user, 'visitor': $visitor, 'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1.aql
new file mode 100644
index 0000000..d328366
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1.aql
@@ -0,0 +1,37 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-lot-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $user.lottery_numbers ~= $visitor.lottery_numbers
+order by $user.uid, $visitor.vid
+return {'user': $user, 'visitor': $visitor}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2.aql
new file mode 100644
index 0000000..bf0f287
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2.aql
@@ -0,0 +1,37 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-lot-aqlplus_2.adm';
+
+set simthreshold '.5f';
+
+for $visitor in dataset('Visitors')
+for $user in dataset('Users')
+where $user.lottery_numbers ~= $visitor.lottery_numbers
+order by $user.uid, $visitor.vid
+return {'user': $user, 'visitor': $visitor}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3.aql
new file mode 100644
index 0000000..72cb80c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3.aql
@@ -0,0 +1,37 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-lot-aqlplus_3.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $visitor.lottery_numbers ~= $user.lottery_numbers
+order by $user.uid, $visitor.vid
+return {'user': $user, 'visitor': $visitor}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4.aql
new file mode 100644
index 0000000..19415d5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4.aql
@@ -0,0 +1,38 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-lot-aqlplus_4.adm';
+
+set simfunction 'Jaccard';
+set simthreshold '.6f';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $user.lottery_numbers ~= $visitor.lottery_numbers
+order by $user.uid, $visitor.vid
+return {'user': $user, 'visitor': $visitor}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5.aql
new file mode 100644
index 0000000..698b1b5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5.aql
@@ -0,0 +1,35 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-lot-aqlplus_5.adm';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $user.lottery_numbers ~= $visitor.lottery_numbers
+order by $user.uid, $visitor.vid
+return {'user': $user, 'visitor': $visitor}
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1.aql
new file mode 100644
index 0000000..6a43fa6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1.aql
@@ -0,0 +1,39 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-lot-int-aqlplus_1.adm';
+
+set simthreshold '.5f';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $user.lottery_numbers ~= $visitor.lottery_numbers
+and $user.interests ~= $visitor.interests
+order by $user.uid, $visitor.vid
+return { 'user': $user, 'visitor': $visitor }
diff --git a/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2.aql
new file mode 100644
index 0000000..693191a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2.aql
@@ -0,0 +1,39 @@
+drop dataverse fuzzyjoin if exists;
+
+create dataverse fuzzyjoin;
+
+use dataverse fuzzyjoin;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: <string>
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+
+load dataset Users from nc1:'data/users-visitors-small/users.json';
+load dataset Visitors from nc1:'data/users-visitors-small/visitors.json';
+
+write output to nc1:'rttest/fuzzyjoin_user-vis-lot-int-aqlplus_2.adm';
+
+set simthreshold '.5f';
+
+for $visitor in dataset('Visitors')
+for $user in dataset('Users')
+where $user.lottery_numbers ~= $visitor.lottery_numbers
+and $user.interests ~= $visitor.interests
+order by $user.uid, $visitor.vid
+return { 'user': $user, 'visitor': $visitor }
diff --git a/asterix-app/src/test/resources/runtimets/queries/groupby-orderby-count.aql b/asterix-app/src/test/resources/runtimets/queries/groupby-orderby-count.aql
new file mode 100644
index 0000000..ce4662d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/groupby-orderby-count.aql
@@ -0,0 +1,23 @@
+drop dataverse twitter if exists;
+create dataverse twitter;
+use dataverse twitter;
+create type Tweet as open {
+ id: int32,
+ tweetid: int64,
+ loc: point,
+ time: datetime,
+ text: string
+}
+
+create external dataset TwitterData(Tweet)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/twitter/extrasmalltweets.txt"),("format"="adm"));
+
+write output to nc1:"rttest/groupby-orderby-count.adm";
+
+for $t in dataset('TwitterData')
+let $tokens := word-tokens($t.text)
+for $token in $tokens
+group by $tok := $token with $token
+order by count($token) desc, $tok asc
+return { "word": $tok, "count": count($token) }
diff --git a/asterix-app/src/test/resources/runtimets/queries/ifthenelse_01.aql b/asterix-app/src/test/resources/runtimets/queries/ifthenelse_01.aql
new file mode 100644
index 0000000..1da06a7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/ifthenelse_01.aql
@@ -0,0 +1,8 @@
+use dataverse test;
+
+write output to nc1:"rttest/ifthenelse_01.adm";
+
+if (2>1) then
+ 20
+else
+ 10
diff --git a/asterix-app/src/test/resources/runtimets/queries/index/orders-index-custkey-conjunctive.aql b/asterix-app/src/test/resources/runtimets/queries/index/orders-index-custkey-conjunctive.aql
new file mode 100644
index 0000000..f01b16d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/index/orders-index-custkey-conjunctive.aql
@@ -0,0 +1,39 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+use dataverse tpch;
+
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+create index idx_Orders_Custkey on Orders(o_custkey) ;
+
+write output to nc1:"rttest/index_orders-index-custkey-conjunctive.adm";
+
+for $o in dataset('Orders')
+where
+ $o.o_custkey = 40 and $o.o_totalprice > 150000.0
+order by $o.o_orderkey
+return {
+ "o_orderkey": $o.o_orderkey,
+ "o_custkey": $o.o_custkey
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/index/orders-index-custkey.aql b/asterix-app/src/test/resources/runtimets/queries/index/orders-index-custkey.aql
new file mode 100644
index 0000000..7bc7320
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/index/orders-index-custkey.aql
@@ -0,0 +1,39 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+use dataverse tpch;
+
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+create index idx_Orders_Custkey on Orders(o_custkey);
+
+write output to nc1:"rttest/index_orders-index-custkey.adm";
+
+for $o in dataset('Orders')
+where
+ $o.o_custkey = 40
+order by $o.o_orderkey
+return {
+ "o_orderkey": $o.o_orderkey,
+ "o_custkey": $o.o_custkey
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/index/range-search.aql b/asterix-app/src/test/resources/runtimets/queries/index/range-search.aql
new file mode 100644
index 0000000..ea0b4ef
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/index/range-search.aql
@@ -0,0 +1,42 @@
+drop dataverse test if exists;
+
+create dataverse test;
+use dataverse test;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: double,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+create index idx_LineItem_partkey on LineItem(l_linenumber);
+create index idx_LineItem_suppkey on LineItem(l_suppkey);
+
+write output to nc1:"rttest/index_range-search.adm";
+for $c in dataset('LineItem')
+where $c.l_suppkey < 100 and $c.l_suppkey>5
+order by $c.l_orderkey, $c.l_linenumber
+return $c
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/index/rtree-secondary-index.aql b/asterix-app/src/test/resources/runtimets/queries/index/rtree-secondary-index.aql
new file mode 100644
index 0000000..71c5630
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/index/rtree-secondary-index.aql
@@ -0,0 +1,33 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as closed {
+ id: int32,
+ point: point,
+ kwds: string,
+ line1: line,
+ line2: line,
+ poly1: polygon,
+ poly2: polygon,
+ rec: rectangle
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset MyData(MyRecord)
+ partitioned by key id on group1;
+
+load dataset MyData
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+create index rtree_index_point on MyData(point) type rtree;
+
+
+write output to nc1:"rttest/index_rtree-secondary-index.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.point, create-polygon(create-point(4.0,1.0), create-point(4.0,4.0), create-point(12.0,4.0), create-point(12.0,1.0)))
+order by $o.id
+return {"id":$o.id}
diff --git a/asterix-app/src/test/resources/runtimets/queries/is-null_01.aql b/asterix-app/src/test/resources/runtimets/queries/is-null_01.aql
new file mode 100644
index 0000000..ca6ac7a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/is-null_01.aql
@@ -0,0 +1,8 @@
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/is-null_01.adm";
+
+[is-null(null), is-null(10)]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01.aql b/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01.aql
new file mode 100644
index 0000000..c4bbeae
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_any-collection-member_01.adm";
+
+let $x := {{1,1,1}}
+return $x[?]
+
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/get-item_01.aql b/asterix-app/src/test/resources/runtimets/queries/list/get-item_01.aql
new file mode 100644
index 0000000..5bdd362
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/get-item_01.aql
@@ -0,0 +1,8 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_get-item_01.adm";
+
+let $x := [1, 2, 3, 4]
+return $x[2]
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/len_01.aql b/asterix-app/src/test/resources/runtimets/queries/list/len_01.aql
new file mode 100644
index 0000000..bd9fb11
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/len_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_len_01.adm";
+
+for $l in [1]
+return [
+ len([]), len([1]), len([1, 2]), len([1, 2, 3]),
+ len({{}}), len({{1}}), len({{1, 2}}), len({{1, 2, 3}})]
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/len_null_01.aql b/asterix-app/src/test/resources/runtimets/queries/list/len_null_01.aql
new file mode 100644
index 0000000..3966c12
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/len_null_01.aql
@@ -0,0 +1,8 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_len_null_01.adm";
+
+let $n := null
+return {"len1": len([]), "len2": $n}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/listify_01.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_01.aql
new file mode 100644
index 0000000..fe89111
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/listify_01.aql
@@ -0,0 +1,14 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_listify_01.adm";
+
+let $token_list :=
+ for $token in [1, 2, 3] return $token
+return $token_list
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/listify_02.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_02.aql
new file mode 100644
index 0000000..4fe1e0d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/listify_02.aql
@@ -0,0 +1,14 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_listify_02.adm";
+
+let $token_list :=
+ for $token in ["foo", "bar"] return $token
+return $token_list
+
+
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01.aql
new file mode 100644
index 0000000..f1e369b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_ordered-list-constructor_01.adm";
+
+[ "foo", "bar", "foobar" ]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02.aql
new file mode 100644
index 0000000..c8d5262
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_ordered-list-constructor_02.adm";
+
+[ ["foo", "bar"], ["foobar"] ]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01.aql b/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01.aql
new file mode 100644
index 0000000..d63232c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01.aql
@@ -0,0 +1,8 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_scan-collection_01.adm";
+
+for $u in [1, 2, 3]
+return $u
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/union_01.aql b/asterix-app/src/test/resources/runtimets/queries/list/union_01.aql
new file mode 100644
index 0000000..74671d5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/union_01.aql
@@ -0,0 +1,12 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_union_01.adm";
+
+for $x in
+({{1,3}} union {{1,2}})
+order by $x
+return $x
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/union_02.aql b/asterix-app/src/test/resources/runtimets/queries/list/union_02.aql
new file mode 100644
index 0000000..dd9616d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/union_02.aql
@@ -0,0 +1,20 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_union_02.adm";
+
+for $z in (
+(
+for $x in {{3,2}}
+return $x
+)
+union
+(
+for $y in {{2,1}}
+return $y
+)
+)
+order by $z
+return $z
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01.aql
new file mode 100644
index 0000000..bc6f935
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_unordered-list-constructor_01.adm";
+
+{{ "foo", "bar", "foobar" }}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02.aql
new file mode 100644
index 0000000..267db4d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/list_unordered-list-constructor_02.adm";
+
+{{ {{"foo"}}, {{"bar", "foobar"}} }}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/nested-loop-join_01.aql b/asterix-app/src/test/resources/runtimets/queries/nested-loop-join_01.aql
new file mode 100644
index 0000000..876648b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/nested-loop-join_01.aql
@@ -0,0 +1,39 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type UserType as open {
+ uid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: {{string}}
+}
+
+create type VisitorType as open {
+ vid: int32,
+ name: string,
+ lottery_numbers: [int32],
+ interests: {{string}}
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset Users(UserType) partitioned by key uid on group1;
+create dataset Visitors(VisitorType) partitioned by key vid on group1;
+
+
+load dataset Users
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/users-visitors-small/users.json"),("format"="adm"));
+
+load dataset Visitors
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/users-visitors-small/visitors.json"),("format"="adm"));
+
+write output to nc1:'rttest/nested-loop-join_01.adm';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where len($user.lottery_numbers) = len($visitor.lottery_numbers)
+order by $user.uid, $visitor.vid
+return {'user': $user, 'visitor': $visitor, 'user-lottery_numbers-len': len($user.lottery_numbers), 'visitor-lottery_numbers-len': len($visitor.lottery_numbers)}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/add_double.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_double.aql
new file mode 100644
index 0000000..7275ddd
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/add_double.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_add_double.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c6+$c1,"result2": $c6+$c2,"result3": $c6+$c3,"result4": $c6+$c4,"result5": $c6+$c5, "result6": $c6+$c6, "result7": $c6+$c8 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/add_float.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_float.aql
new file mode 100644
index 0000000..c833d1a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/add_float.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_add_float.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c5+$c1,"result2": $c5+$c2,"result3": $c5+$c3,"result4": $c5+$c4,"result5": $c5+$c5, "result6": $c5+$c6, "result7": $c6+$c8 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16.aql
new file mode 100644
index 0000000..9d4c98b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_add_int16.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c2+$c1,"result2": $c2+$c2,"result3": $c2+$c3,"result4": $c2+$c4,"result5": $c2+$c5, "result6": $c2+$c6, "result7": $c6+$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32.aql
new file mode 100644
index 0000000..51dda5a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_add_int32.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c3+$c1,"result2": $c3+$c2,"result3": $c3+$c3,"result4": $c3+$c4,"result5": $c3+$c5, "result6": $c3+$c6, "result7": $c6+$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64.aql
new file mode 100644
index 0000000..64fc6a5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_add_int64.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c4+$c1,"result2": $c4+$c2,"result3": $c4+$c3,"result4": $c4+$c4,"result5": $c4+$c5, "result6": $c4+$c6, "result7": $c6+$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8.aql
new file mode 100644
index 0000000..9d3bb3f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_add_int8.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c1+$c1,"result2": $c1+$c2,"result3": $c1+$c3,"result4": $c1+$c4,"result5": $c1+$c5, "result6": $c1+$c6, "result7": $c6+$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double.aql
new file mode 100644
index 0000000..9b3412d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_divide_double.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c6/$c1,"result2": $c6/$c2,"result3": $c6/$c3,"result4": $c6/$c4,"result5": $c6/$c5, "result6": $c6/$c6, "result7": $c6/$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float.aql
new file mode 100644
index 0000000..ac8b2cb
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_divide_float.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c5/$c1,"result2": $c5/$c2,"result3": $c5/$c3,"result4": $c5/$c4,"result5": $c5/$c5, "result6": $c5/$c6, "result7": $c6/$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16.aql
new file mode 100644
index 0000000..afda7f5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_divide_int16.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c2/$c1,"result2": $c2/$c2,"result3": $c2/$c3,"result4": $c2/$c4,"result5": $c2/$c5, "result6": $c2/$c6, "result7": $c6/$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32.aql
new file mode 100644
index 0000000..b5305c3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_divide_int32.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c3/$c1,"result2": $c3/$c2,"result3": $c3/$c3,"result4": $c3/$c4,"result5": $c3/$c5, "result6": $c3/$c6, "result7": $c6/$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64.aql
new file mode 100644
index 0000000..f4239b1
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_divide_int64.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c4/$c1,"result2": $c4/$c2,"result3": $c4/$c3,"result4": $c4/$c4,"result5": $c4/$c5, "result6": $c4/$c6, "result7": $c6/$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8.aql
new file mode 100644
index 0000000..a38ba28
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_divide_int8.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c1/$c1,"result2": $c1/$c2,"result3": $c1/$c3,"result4": $c1/$c4,"result5": $c1/$c5, "result6": $c1/$c6, "result7": $c6/$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double.aql
new file mode 100644
index 0000000..3e74b2d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_multiply_double.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c6*$c1,"result2": $c6*$c2,"result3": $c6*$c3,"result4": $c6*$c4,"result5": $c6*$c5, "result6": $c6*$c6, "result7": $c6*$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float.aql
new file mode 100644
index 0000000..64a5601
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_multiply_float.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c5*$c1,"result2": $c5*$c2,"result3": $c5*$c3,"result4": $c5*$c4,"result5": $c5*$c5, "result6": $c5*$c6, "result7": $c6*$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16.aql
new file mode 100644
index 0000000..18c3dd8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_multiply_int16.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c2*$c1,"result2": $c2*$c2,"result3": $c2*$c3,"result4": $c2*$c4,"result5": $c2*$c5, "result6": $c2*$c6, "result7": $c6*$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32.aql
new file mode 100644
index 0000000..72d29c3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_multiply_int32.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c3*$c1,"result2": $c3*$c2,"result3": $c3*$c3,"result4": $c3*$c4,"result5": $c3*$c5, "result6": $c3*$c6, "result7": $c6*$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64.aql
new file mode 100644
index 0000000..c734dc7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_multiply_int64.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c4*$c1,"result2": $c4*$c2,"result3": $c4*$c3,"result4": $c4*$c4,"result5": $c4*$c5, "result6": $c4*$c6, "result7": $c6*$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8.aql
new file mode 100644
index 0000000..f65b61d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_multiply_int8.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c1*$c1,"result2": $c1*$c2,"result3": $c1*$c3,"result4": $c1*$c4,"result5": $c1*$c5, "result6": $c1*$c6, "result7": $c6*$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double.aql
new file mode 100644
index 0000000..46115b6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_subtract_double.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c6 -$c1,"result2": $c6 -$c2,"result3": $c6 -$c3,"result4": $c6 -$c4,"result5": $c6 -$c5, "result6": $c6 -$c6, "result7": $c6 -$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float.aql
new file mode 100644
index 0000000..e20e43c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_subtract_float.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c5 -$c1,"result2": $c5 -$c2,"result3": $c5 -$c3,"result4": $c5 -$c4,"result5": $c5 -$c5, "result6": $c5 -$c6, "result7": $c6 -$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16.aql
new file mode 100644
index 0000000..3fea866
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_subtract_int16.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c2 -$c1,"result2": $c2 -$c2,"result3": $c2 -$c3,"result4": $c2 -$c4,"result5": $c2 -$c5, "result6": $c2 -$c6, "result7": $c6 -$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32.aql
new file mode 100644
index 0000000..b668402
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_subtract_int32.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c3 -$c1,"result2": $c3 -$c2,"result3": $c3 -$c3,"result4": $c3 -$c4,"result5": $c3 -$c5, "result6": $c3 -$c6, "result7": $c6 -$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64.aql
new file mode 100644
index 0000000..cb8cdda
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_subtract_int64.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c4 -$c1,"result2": $c4 -$c2,"result3": $c4 -$c3,"result4": $c4 -$c4,"result5": $c4 -$c5, "result6": $c4 -$c6, "result7": $c6 -$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8.aql
new file mode 100644
index 0000000..f9afed0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_subtract_int8.adm";
+
+let $c1 := int8("+1")
+let $c2 := int16("2")
+let $c3 := int32("+3")
+let $c4 := int64("-4")
+let $c5 := float("-5.5f")
+let $c6 := double("-6.5d")
+let $c7 := [1]
+let $c8 := $c7[1]
+return {"result1": $c1 -$c1,"result2": $c1 -$c2,"result3": $c1 -$c3,"result4": $c1 -$c4,"result5": $c1 -$c5, "result6": $c1 -$c6, "result7": $c6 -$c8}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01.aql
new file mode 100644
index 0000000..d10860c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_unary-minus_double_01.adm";
+
+let $c1 := double("-20.56e-30")
+let $c2 := double("NaN")
+let $c3 := double("INF")
+let $c4 := double("-INF")
+return {"double1": numeric-unary-minus($c1),"double2": numeric-unary-minus($c2),"double3": numeric-unary-minus($c3),"double4": numeric-unary-minus($c4)}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02.aql
new file mode 100644
index 0000000..e13a929
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_unary-minus_double_02.adm";
+
+let $c1 := double("-20.56e-30")
+let $c2 := double("NaN")
+let $c3 := double("INF")
+let $c4 := double("-INF")
+return {"double1": -$c1,"double2": -$c2,"double3": -$c3,"double4": -$c4}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01.aql
new file mode 100644
index 0000000..fe7d11c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_unary-minus_float_01.adm";
+
+let $c1 := float("-80.20f")
+let $c2 := float("NaN")
+let $c3 := float("INF")
+let $c4 := float("-INF")
+return {"float1": numeric-unary-minus($c1),"float2": numeric-unary-minus($c2),"float3": numeric-unary-minus($c3),"float4": numeric-unary-minus($c4)}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02.aql
new file mode 100644
index 0000000..9c0d590
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_unary-minus_float_02.adm";
+
+let $c1 := float("-80.20f")
+let $c2 := float("NaN")
+let $c3 := float("INF")
+let $c4 := float("-INF")
+return {"float1": -$c1,"float2": -$c2,"float3": -$c3,"float4": -$c4}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01.aql
new file mode 100644
index 0000000..10a5b69
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_unary-minus_int_01.adm";
+
+let $c1 := int8("+80")
+let $c2 := int16("160")
+let $c3 := int32("+320")
+let $c4 := int64("-640")
+return {"int8": numeric-unary-minus($c1),"int16": numeric-unary-minus($c2),"int32": numeric-unary-minus($c3),"int64": numeric-unary-minus($c4)}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02.aql
new file mode 100644
index 0000000..58acf8b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02.aql
@@ -0,0 +1,11 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_unary-minus_int_02.adm";
+
+let $c1 := int8("+80")
+let $c2 := int16("160")
+let $c3 := int32("+320")
+let $c4 := int64("-640")
+return {"int8": -$c1,"int16": -$c2,"int32": -$c3,"int64": -$c4}
diff --git a/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null.aql
new file mode 100644
index 0000000..13b3e26
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/numeric_unary-minus_null.adm";
+
+let $l := [1]
+let $c := $l[1]
+return {"nullField": -$c}
diff --git a/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01.aql
new file mode 100644
index 0000000..05973fa
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/quantifiers_everysat_01.adm";
+
+for $x in [10, -30]
+where every $y in [-20, -10]
+ satisfies $y > $x
+return $x
diff --git a/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01.aql
new file mode 100644
index 0000000..9837981
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/quantifiers_somesat_01.adm";
+
+for $x in [10, -30, -21, 50]
+where some $y in [-20, -40]
+ satisfies $y > $x
+return $x
diff --git a/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02.aql
new file mode 100644
index 0000000..9ac6f95
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02.aql
@@ -0,0 +1,53 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as open {
+ cid: int32,
+ name: string,
+ age: int32?,
+ address: AddressType?,
+ lastorder: {
+ oid: int32,
+ total: float
+ }
+}
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset CustomerSomeSat02(CustomerType)
+ partitioned by key cid on group1;
+create dataset OrdersSomeSat02(OrderType)
+ partitioned by key oid on group1;
+
+load dataset CustomerSomeSat02
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/customer-tiny.adm"),("format"="adm"));
+
+load dataset OrdersSomeSat02
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/custord-tiny/order-tiny.adm"),("format"="adm"));
+
+write output to nc1:"rttest/quantifiers_somesat_02.adm";
+
+for $x in dataset('CustomerSomeSat02')
+where some $y in dataset('OrdersSomeSat02')
+ satisfies $y.cid = $x.cid
+order by $x.cid
+return $x.cid
diff --git a/asterix-app/src/test/resources/runtimets/queries/range_01.aql b/asterix-app/src/test/resources/runtimets/queries/range_01.aql
new file mode 100644
index 0000000..0f38113
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/range_01.aql
@@ -0,0 +1,8 @@
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/range_01.adm";
+
+for $x in range(20,30)
+return $x
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01.aql
new file mode 100644
index 0000000..6cb32b0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01.aql
@@ -0,0 +1,8 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+
+write output to nc1:"rttest/records_closed-record-constructor_01.adm";
+
+closed-record-constructor("foo1", 10, "bar1", 20, "foo2", 30, "bar2", 40)
diff --git a/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02.aql
new file mode 100644
index 0000000..204c56b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/records_closed-record-constructor_02.adm";
+
+closed-record-constructor("foo1", 10, "bar1", closed-record-constructor("bar1.1", 10, "bar1.2", 20, "bar1.3", 30, "bar1.4", closed-record-constructor("bar1.4.1", 10, "bar1.4.2", 20, "bar1.4.3", 30, "bar1.4.4", 40), "foo2", 30, "bar2", 40), "foo2", 30, "bar2", 40)
diff --git a/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03.aql
new file mode 100644
index 0000000..e4378a1
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/records_closed-record-constructor_03.adm";
+
+{"foo1": 10, "bar1": {"bar1.1": 10, "bar1.2": 20, "bar1.3": 30, "bar1.4": {"bar1.4.1": 10, "bar1.4.2": 20 } }, "foo2": 30, "bar2": 40}
diff --git a/asterix-app/src/test/resources/runtimets/queries/records/expFieldName.aql b/asterix-app/src/test/resources/runtimets/queries/records/expFieldName.aql
new file mode 100644
index 0000000..36df536
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/records/expFieldName.aql
@@ -0,0 +1,8 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/records_expFieldName.adm";
+
+for $x in ["field1", "field2"]
+return {$x: 1}
diff --git a/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01.aql b/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01.aql
new file mode 100644
index 0000000..b771ece
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+
+write output to nc1:"rttest/records_field-access-by-index_01.adm";
+
+let $x := { "foo1": 10, "bar1": 20, "foo2": 30, "bar2": 40 }
+return field-access-by-index($x,2)
diff --git a/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01.aql
new file mode 100644
index 0000000..c64227a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/records_open-record-constructor_01.adm";
+
+open-record-constructor("foo1", 10, "bar1", 20, "foo2", 30, "bar2", 40)
diff --git a/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02.aql
new file mode 100644
index 0000000..373d853
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/records_open-record-constructor_02.adm";
+
+open-record-constructor("foo1", 10, "bar1", closed-record-constructor("bar1.1", 10, "bar1.2", 20, "bar1.3", 30, "bar1.4", closed-record-constructor("bar1.4.1", 10, "bar1.4.2", 20, "bar1.4.3", 30, "bar1.4.4", 40), "foo2", 30, "bar2", 40), "foo2", 30, "bar2", 40)
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/10.aql b/asterix-app/src/test/resources/runtimets/queries/scan/10.aql
new file mode 100644
index 0000000..7878583
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/10.aql
@@ -0,0 +1,30 @@
+/* scan and print a delimited text file */
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type DBLPType as open {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+
+create nodegroup group1 if not exists on nc1;
+
+create dataset DBLP1(DBLPType)
+ partitioned by key id on group1;
+
+// drop dataset DBLP1;
+load dataset DBLP1
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/dblp-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));
+
+
+write output to nc1:"rttest/scan_10.adm";
+
+for $paper in dataset('DBLP1')
+order by $paper.id
+return $paper
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/20.aql b/asterix-app/src/test/resources/runtimets/queries/scan/20.aql
new file mode 100644
index 0000000..a07aab2
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/20.aql
@@ -0,0 +1,29 @@
+/* scan and print an ADM file as a dataset of closed records */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type DBLPType as closed {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1;
+
+create dataset DBLPadm(DBLPType)
+ partitioned by key id on group1;
+
+// drop dataset DBLPadm;
+load dataset DBLPadm
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/dblp-small/dblp-small.adm"),("format"="adm"));
+
+write output to nc1:"rttest/scan_20.adm";
+
+for $paper in dataset('DBLPadm')
+order by $paper.id
+return $paper
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/30.aql b/asterix-app/src/test/resources/runtimets/queries/scan/30.aql
new file mode 100644
index 0000000..057bdae
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/30.aql
@@ -0,0 +1,23 @@
+/* scan and print 2 ADM file splits as an external dataset of closed records */
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type DBLPType as closed {
+ id: int32,
+ dblpid: string,
+ title: string,
+ authors: string,
+ misc: string
+}
+
+create nodegroup group1 if not exists on nc1;
+
+create external dataset DBLPsplits(DBLPType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/dblp-small/dblp-small.adm"),("format"="adm"));
+
+write output to nc1:"rttest/scan_30.adm";
+
+for $paper in dataset('DBLPsplits')
+return $paper
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01.aql b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01.aql
new file mode 100644
index 0000000..e772502
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01.aql
@@ -0,0 +1,44 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+
+create type AllType as open {
+ id: int32,
+ name: string,
+ age: float,
+ salary: double,
+ married: boolean,
+ interests: {{string}},
+ children: [string],
+ address: AddressType,
+ dob: date,
+ time: time,
+ datetime: datetime,
+ duration: duration,
+ location2d: point,
+ location3d: point3d,
+ line: line,
+ polygon: polygon,
+ circle: circle
+
+ // binary
+ // union
+}
+
+
+create external dataset All(AllType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/allData.json"),("format"="adm"));
+
+write output to nc1:"rttest/scan_alltypes_01.adm";
+
+for $a in dataset('All')
+return $a
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01.aql b/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01.aql
new file mode 100644
index 0000000..f716d1c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01.aql
@@ -0,0 +1,23 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type NumericType as open {
+ id: int32,
+ int8Field: int8?,
+ int16Field: int16?,
+ int32Field: int32?,
+ int64Field: int64?,
+ floatField: float?,
+ doubleField: double?
+}
+
+
+create external dataset Numeric(NumericType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/numericData.adm"),("format"="adm"));
+
+write output to nc1:"rttest/scan_numeric_types_01.adm";
+
+for $a in dataset('Numeric')
+return $a
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01.aql b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01.aql
new file mode 100644
index 0000000..1ad5244
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01.aql
@@ -0,0 +1,22 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+
+create type SpatialType as open {
+ id: int32,
+ point: point,
+ point3d: point3d,
+ line: line,
+ polygon: polygon,
+ circle: circle
+}
+
+create external dataset Spatial(SpatialType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/scan_spatial_types_01.adm";
+
+for $a in dataset('Spatial')
+return $a
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02.aql b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02.aql
new file mode 100644
index 0000000..6bca691
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02.aql
@@ -0,0 +1,27 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type SpatialType as open {
+ id: int32,
+ point: point,
+ point3d: point3d,
+ line: line,
+ polygon: polygon,
+ circle: circle
+}
+
+create nodegroup group1 on nc1;
+
+create dataset Spatial2(SpatialType)
+ partitioned by key id on group1;
+
+load dataset Spatial2
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/spatialData.txt"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/scan_spatial_types_02.adm";
+
+for $a in dataset('Spatial2')
+return $a
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01.aql b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01.aql
new file mode 100644
index 0000000..d5074a0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01.aql
@@ -0,0 +1,20 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type TempType as open {
+ id: int32,
+ date: date,
+ time: time,
+ datetime: datetime,
+ duration: duration
+}
+
+create external dataset Temp(TempType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/tempData.json"),("format"="adm"));
+
+write output to nc1:"rttest/scan_temp_types_01.adm";
+
+for $a in dataset('Temp')
+return $a
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02.aql b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02.aql
new file mode 100644
index 0000000..22289ef
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02.aql
@@ -0,0 +1,26 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type TempType as closed {
+ id: int32,
+ date: date,
+ time: time,
+ datetime: datetime,
+ duration: duration
+}
+
+create nodegroup group1 on nc1;
+
+create dataset Temp2(TempType)
+ partitioned by key id on group1;
+
+load dataset Temp2
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/tempData.txt"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/scan_temp_types_02.adm";
+
+for $a in dataset('Temp2')
+return $a
diff --git a/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable.aql
new file mode 100644
index 0000000..c1bbe7e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable.aql
@@ -0,0 +1,33 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as open {
+ cid: int32,
+ name: string,
+ age: int32?,
+ address: AddressType?,
+ interests: {{string}},
+ children: [ { name: string, age: int32? } ]
+}
+
+
+create nodegroup group1 if not exists on nc1;
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/semistructured/tiny01/customer.adm"),("format"="adm"));
+
+write output to nc1:"rttest/semistructured_count-nullable.adm";
+
+for $c in dataset('Customers')
+group by $age := $c.age with $c
+order by $age
+return { "custage": $age, "count": count($c) }
diff --git a/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter.aql
new file mode 100644
index 0000000..b5bea3e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter.aql
@@ -0,0 +1,33 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+
+create type AddressType as open {
+ number: int32,
+ street: string,
+ city: string
+}
+
+create type CustomerType as open {
+ cid: int32,
+ name: string,
+ age: int32?,
+ address: AddressType?,
+ interests: {{string}},
+ children: [ { name: string, age: int32? } ]
+}
+
+
+create nodegroup group1 if not exists on nc1;
+
+create external dataset Customers(CustomerType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/semistructured/tiny01/customer.adm"),("format"="adm"));
+
+write output to nc1:"rttest/semistructured_cust-filter.adm";
+
+for $c in dataset('Customers')
+where $c.age < 21
+order by $c.cid
+return { "custname":$c.name, "custage": $c.age }
diff --git a/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1.aql
new file mode 100644
index 0000000..8f44e23
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1.aql
@@ -0,0 +1,25 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type OrderType as open {
+ oid: int32,
+ cid: int32,
+ orderstatus: string,
+ orderpriority: string,
+ clerk: string,
+ total: float
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create external dataset Orders(OrderType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/semistructured/tiny01/orders.adm"),("format"="adm"));
+
+write output to nc1:"rttest/semistructured_has-param1.adm";
+
+for $o in dataset('Orders')
+where not(is-null($o.param1))
+order by $o.oid
+return $o
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_01.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_01.aql
new file mode 100644
index 0000000..2034c38
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_edit-distance-check_01.adm";
+
+let $a := "Nalini Venkatasubramanian"
+let $b := "Nalini Wekatasupramanian"
+let $ed := edit-distance-check($a, $b, 3)
+return $ed
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_02.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_02.aql
new file mode 100644
index 0000000..c3d5342
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_02.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_edit-distance-check_02.adm";
+
+let $a := "Nalini Venkatasubramanian"
+let $b := "Nalini Wekatasupramanian"
+let $ed := edit-distance-check($a, $b, 2)
+return $ed
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_03.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_03.aql
new file mode 100644
index 0000000..ecf556c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_03.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_edit-distance-check_03.adm";
+
+let $a := [1, 2, 3, 4, 5, 6, 7]
+let $b := [1, 3, 4, 5, 7, 8]
+let $ed := edit-distance-check($a, $b, 3)
+return $ed
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_04.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_04.aql
new file mode 100644
index 0000000..80a2da6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_04.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_edit-distance-check_04.adm";
+
+let $a := [1, 2, 3, 4, 5, 6, 7]
+let $b := [1, 3, 4, 5, 7, 8]
+let $ed := edit-distance-check($a, $b, 2)
+return $ed
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_01.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_01.aql
new file mode 100644
index 0000000..3365690
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_edit-distance_01.adm";
+
+let $a := "Nalini Venkatasubramanian"
+let $b := "Nalini Wekatasupramanian"
+let $ed := edit-distance($a, $b)
+return $ed
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_02.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_02.aql
new file mode 100644
index 0000000..bf0df90
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_02.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_edit-distance_02.adm";
+
+let $a := [1, 2, 3, 4, 5, 6, 7]
+let $b := [1, 3, 4, 5, 7, 8]
+let $ed := edit-distance($a, $b)
+return $ed
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard_01.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard_01.aql
new file mode 100644
index 0000000..772e64e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard_01.aql
@@ -0,0 +1,15 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_prefix-len-jaccard_01.adm";
+
+for $l in [1]
+return [
+ prefix-len-jaccard(5, .8f),
+ prefix-len-jaccard(5, .9f),
+ prefix-len-jaccard(10, .8f),
+ prefix-len-jaccard(10, .9f),
+ prefix-len-jaccard(15, .8f),
+ prefix-len-jaccard(15, .9f)
+]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_01.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_01.aql
new file mode 100644
index 0000000..cca0f99
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_similarity-jaccard-check_01.adm";
+
+let $a := [1, 2, 3, 4, 5, 8, 9]
+let $b := [1, 2, 3, 4, 5, 7, 8, 9, 10, 11]
+let $jacc := similarity-jaccard-check($a, $b, 0.7f)
+return $jacc
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_02.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_02.aql
new file mode 100644
index 0000000..38fe1f4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_02.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_similarity-jaccard-check_02.adm";
+
+let $a := [1, 2, 3, 4, 5, 8, 9]
+let $b := [1, 2, 3, 4, 5, 7, 8, 9, 10, 11]
+let $jacc := similarity-jaccard-check($a, $b, 0.8f)
+return $jacc
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check_01.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check_01.aql
new file mode 100644
index 0000000..73c7ebc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check_01.aql
@@ -0,0 +1,19 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_similarity-jaccard-prefix-check_01.adm";
+
+for $l in [1]
+return [
+ similarity-jaccard-prefix-check(3, [1, 2, 3], 3, [1, 2, 3], 1, 1f),
+
+ similarity-jaccard-prefix-check(3, [1, 2, 3], 3, [1, 2, 4], 1, .5f),
+ similarity-jaccard-prefix-check(3, [1, 2, 3], 3, [1, 2, 4], 1, .6f),
+
+
+ similarity-jaccard-prefix-check(3, [1, 2, 3], 9, [1, 2, 3], 1, .5f),
+
+ similarity-jaccard-prefix-check(4, [1, 2, 3, 4], 2, [1, 2], 1, .5f),
+ similarity-jaccard-prefix-check(4, [1, 2, 3, 4], 4, [1, 2], 1, .33f)
+]
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix_01.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix_01.aql
new file mode 100644
index 0000000..35b4719
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix_01.aql
@@ -0,0 +1,19 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_similarity-jaccard-prefix_01.adm";
+
+for $l in [1]
+return [
+ similarity-jaccard-prefix(3, [1, 2, 3], 3, [1, 2, 3], 1, 1f),
+
+ similarity-jaccard-prefix(3, [1, 2, 3], 3, [1, 2, 4], 1, .5f),
+ similarity-jaccard-prefix(3, [1, 2, 3], 3, [1, 2, 4], 1, .6f),
+
+
+ similarity-jaccard-prefix(3, [1, 2, 3], 9, [1, 2, 3], 1, .5f),
+
+ similarity-jaccard-prefix(4, [1, 2, 3, 4], 2, [1, 2], 1, .5f),
+ similarity-jaccard-prefix(4, [1, 2, 3, 4], 4, [1, 2], 1, .33f)
+]
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_01.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_01.aql
new file mode 100644
index 0000000..ae0747e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_similarity-jaccard_01.adm";
+
+let $a := [1, 2, 3, 4, 5, 8, 9]
+let $b := [1, 2, 3, 4, 5, 7, 8, 9, 10, 11]
+let $jacc := similarity-jaccard($a, $b)
+return $jacc
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_02.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_02.aql
new file mode 100644
index 0000000..d0a7e1f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_02.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_similarity-jaccard_02.adm";
+
+let $a := ["a"]
+let $b := ["b"]
+let $jacc := similarity-jaccard($a, $b)
+return $jacc
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_03.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_03.aql
new file mode 100644
index 0000000..fd5dd21
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_03.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/similarity_similarity-jaccard_03.adm";
+
+let $a := ["a"]
+let $b := [ ]
+let $jacc := similarity-jaccard($a, $b)
+return $jacc
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering.aql
new file mode 100644
index 0000000..0face3b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering.aql
@@ -0,0 +1,41 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type Tweet as closed {
+ id: int32,
+ tweetid: int64,
+ loc: point,
+ time: datetime,
+ text: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset TwitterData(Tweet)
+ partitioned by key id on group1;
+
+
+load dataset TwitterData
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/twitter/extrasmalltweets.txt"),("format"="adm")) pre-sorted;
+
+create index rtree_index_point on TwitterData(loc) type rtree;
+
+write output to nc1:"rttest/spatial_cell-aggregation-with-filtering.adm";
+
+for $t in dataset('TwitterData')
+let $keyword := "Allergies"
+let $region := polygon("
+ 33.80503407287759,-126.41235263538363
+ 44.9090773200516,-126.41235263538363
+ 44.9090773200516,-87.65258701038363
+ 33.80503407287759,-87.65258701038363")
+
+where spatial-intersect($t.loc, $region) and
+$t.time > datetime("2011-05-15T00:00:00Z") and $t.time < datetime("2011-05-16T23:59:59Z") and
+contains($t.text, $keyword)
+group by $c := spatial-cell($t.loc, create-point(24.5,-125.5), 3.0, 3.0) with $t
+let $num := count($t)
+order by $num
+return { "cell": $c, "count": $num }
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation.aql
new file mode 100644
index 0000000..44ad6ea
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation.aql
@@ -0,0 +1,23 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ loc: point
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialDataAggregation.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_cell-aggregation.adm";
+
+let $grid :=
+for $o in dataset('MyData')
+group by $c := spatial-cell($o.loc, create-point(0.0,0.0), 5.0, 5.0) with $o
+let $num := count($o)
+order by $num
+return { "cell": $c, "count": $num}
+for $g in $grid
+return $g
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle.aql
new file mode 100644
index 0000000..6018671
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_circle-intersect-circle.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect(create-circle(create-point(0.0,0.0), 5.0), create-circle(create-point(9.9,0.0), 5.0))
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points.aql
new file mode 100644
index 0000000..c02eba2
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_distance-between-points.adm";
+
+for $o in dataset('MyData')
+let $distance := spatial-distance($o.point, create-point(0.0, 0.0))
+order by $o.id
+return {"id":$o.id, "distance":$distance}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle.aql
new file mode 100644
index 0000000..035ec63
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_line-intersect-circle.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.line1, create-circle(create-point(0.0,0.0), 5.0))
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line.aql
new file mode 100644
index 0000000..e844030
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_line-intersect-line.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.line1, $o.line2)
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon.aql
new file mode 100644
index 0000000..7ed8e25
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_line-intersect-polygon.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.line1, $o.poly1)
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle.aql
new file mode 100644
index 0000000..940f5c4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+ using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+ (("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_line-intersect-rectangle.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.line1, $o.rec)
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point.aql
new file mode 100644
index 0000000..90d488f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_point-equals-point.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.point, create-point(5.0,1.0))
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle.aql
new file mode 100644
index 0000000..9f9e451
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_point-in-circle.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.point, create-circle(create-point(0.0,0.0), 5.0))
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon.aql
new file mode 100644
index 0000000..c239185
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_point-in-polygon.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.point, $o.poly1)
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle.aql
new file mode 100644
index 0000000..86d3dd9
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_point-in-rectangle.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.point, $o.rec)
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line.aql
new file mode 100644
index 0000000..66908b8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_point-on-line.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.point, $o.line1)
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle.aql
new file mode 100644
index 0000000..acd29a8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_polygon-intersect-circle.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.poly1, create-circle(create-point(6.0,3.0), 1.0))
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon.aql
new file mode 100644
index 0000000..2a14dbd
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_polygon-intersect-polygon.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.poly1, $o.poly2)
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle.aql
new file mode 100644
index 0000000..16bb5a1
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_polygon-intersect-rectangle.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.poly1, $o.rec)
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle.aql
new file mode 100644
index 0000000..4f7c004
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_rectangle-intersect-circle.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.rec, create-circle(create-point(4.1,4.1), 1.0))
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle.aql
new file mode 100644
index 0000000..90c9f77
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_rectangle-intersect-rectangle.adm";
+
+for $o in dataset('MyData')
+where spatial-intersect($o.rec, create-rectangle(create-point(-1.0,5.0), create-point(4.5,9.0)))
+order by $o.id
+return {"id":$o.id}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area.aql
new file mode 100644
index 0000000..7f6c0b7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area.aql
@@ -0,0 +1,21 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type MyRecord as open {
+ id: int32,
+ point: point,
+ kwds: string
+}
+
+create external dataset MyData(MyRecord)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/spatial/spatialData.json"),("format"="adm"));
+
+write output to nc1:"rttest/spatial_spatial-area.adm";
+
+let $polygonArea := spatial-area(create-polygon(create-point(1.0,1.0),create-point(1.0,4.0),create-point(3.0,4.0),create-point(3.0,1.0)))
+let $circleArea := spatial-area(create-circle(create-point(0.0,0.0), 1.0))
+let $rectangleArea := spatial-area(create-rectangle(create-point(0.0,5.0), create-point(8.0,8.0)))
+return {"polygonArea":$polygonArea, "circleArea":$circleArea, "rectangleArea":$rectangleArea}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/string/contains_01.aql b/asterix-app/src/test/resources/runtimets/queries/string/contains_01.aql
new file mode 100644
index 0000000..19ab917
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/string/contains_01.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/string_contains_01.adm";
+
+for $x in ["foofoo"]
+for $y in ["barbar"]
+return [contains($x, "ofo"), contains($y, "ofo")]
diff --git a/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01.aql b/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01.aql
new file mode 100644
index 0000000..251ebe7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/string_ends-with_01.adm";
+
+for $x in ["foofoo"]
+for $y in ["barbar"]
+return [ends-with($x, "ar"), ends-with($y, "ar")]
diff --git a/asterix-app/src/test/resources/runtimets/queries/string/like_01.aql b/asterix-app/src/test/resources/runtimets/queries/string/like_01.aql
new file mode 100644
index 0000000..71a2545
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/string/like_01.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/string_like_01.adm";
+
+[like("A6BBB", "_6%"), like("A8BBB", "_6%")]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/string/like_null.aql b/asterix-app/src/test/resources/runtimets/queries/string/like_null.aql
new file mode 100644
index 0000000..4578a9e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/string/like_null.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/string_like_null.adm";
+
+let $x := like("A8BBB", null)
+let $y := like(null, "_6%")
+return {"field1": $x , "field2": $y}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01.aql b/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01.aql
new file mode 100644
index 0000000..ed36e2d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01.aql
@@ -0,0 +1,9 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/string_starts-with_01.adm";
+
+for $x in ["foofoo"]
+for $y in ["barbar"]
+return [starts-with($x, "ba"), starts-with($y, "ba")]
diff --git a/asterix-app/src/test/resources/runtimets/queries/string/substring_01.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring_01.aql
new file mode 100644
index 0000000..3d2e51f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/string/substring_01.aql
@@ -0,0 +1,8 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/string_substring_01.adm";
+
+for $x in ["foobar"]
+return substring($x, 2, 3)
diff --git a/asterix-app/src/test/resources/runtimets/queries/subset-collection/01.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/01.aql
new file mode 100644
index 0000000..a6083b1
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/subset-collection/01.aql
@@ -0,0 +1,12 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/subset-collection_01.adm";
+
+for $l in subset-collection([1], 0, 1)
+return $l
+/*
+output:
+1
+*/
diff --git a/asterix-app/src/test/resources/runtimets/queries/subset-collection/02.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/02.aql
new file mode 100644
index 0000000..8069ee5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/subset-collection/02.aql
@@ -0,0 +1,13 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/subset-collection_02.adm";
+
+for $l in subset-collection([1, 2, 3, 4], 1, 2)
+return $l
+/*
+output:
+2
+3
+*/
diff --git a/asterix-app/src/test/resources/runtimets/queries/subset-collection/03.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/03.aql
new file mode 100644
index 0000000..17b54d0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/subset-collection/03.aql
@@ -0,0 +1,12 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/subset-collection_03.adm";
+
+for $l in subset-collection([1, 2, 3, 4], 0, 0)
+return $l
+/*
+output:
+EMPTY
+*/
diff --git a/asterix-app/src/test/resources/runtimets/queries/subset-collection/04.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/04.aql
new file mode 100644
index 0000000..97babb9
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/subset-collection/04.aql
@@ -0,0 +1,12 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/subset-collection_04.adm";
+
+for $l in [1]
+return subset-collection([1, 2, 3, 4], 1, 2)
+/*
+edu.uci.ics.asterix.common.exceptions.AsterixException: Trying to create an aggregate from a scalar function descriptor. (fid=subset-collection@3)
+ at edu.uci.ics.asterix.algebra.expressions.FunctionCallExpression.createEvaluatorFactory(FunctionCallExpression.java:85)
+*/
diff --git a/asterix-app/src/test/resources/runtimets/queries/subset-collection/05.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/05.aql
new file mode 100644
index 0000000..8be1211
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/subset-collection/05.aql
@@ -0,0 +1,13 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/subset-collection_05.adm";
+
+for $l in subset-collection(['a', 'b', 'c', 'd'], 1, 2)
+return $l
+/*
+output:
+"b"
+"c"
+*/
diff --git a/asterix-app/src/test/resources/runtimets/queries/subset-collection/06.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/06.aql
new file mode 100644
index 0000000..1569d5a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/subset-collection/06.aql
@@ -0,0 +1,13 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/subset-collection_06.adm";
+
+for $l in subset-collection([1, 2, 3, 4], 2, 2)
+return $l
+/*
+output:
+3
+4
+*/
diff --git a/asterix-app/src/test/resources/runtimets/queries/subset-collection/07.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/07.aql
new file mode 100644
index 0000000..49a9d6a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/subset-collection/07.aql
@@ -0,0 +1,13 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/subset-collection_07.adm";
+
+for $l in subset-collection([1, 2, 3, 4], 2, 10)
+return $l
+/*
+output:
+3
+4
+*/
diff --git a/asterix-app/src/test/resources/runtimets/queries/tid_01.aql b/asterix-app/src/test/resources/runtimets/queries/tid_01.aql
new file mode 100644
index 0000000..3cd8396
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tid_01.aql
@@ -0,0 +1,7 @@
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/tid_01.adm";
+
+for $x at $i in ["a","b","c"]
+return $i
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01.aql
new file mode 100644
index 0000000..d360853
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_counthashed-gram-tokens_01.adm";
+
+let $txt := "Jürgen S. Generic's Car"
+let $tokens := counthashed-gram-tokens($txt, 3, false)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02.aql
new file mode 100644
index 0000000..cb5240d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_counthashed-gram-tokens_02.adm";
+
+let $txt := "Jürgen S. Generic's Car"
+let $tokens := counthashed-gram-tokens($txt, 3, true)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01.aql
new file mode 100644
index 0000000..99c7b1d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_counthashed-word-tokens_01.adm";
+
+let $txt := "Hello World, I would like to inform you of the importance of Foo Bar. Yes, Foo Bar. Jürgen."
+let $tokens := counthashed-word-tokens($txt)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01.aql
new file mode 100644
index 0000000..6be0066
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_gram-tokens_01.adm";
+
+let $txt := "Jürgen S. Generic's Car"
+let $tokens := gram-tokens($txt, 3, false)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02.aql
new file mode 100644
index 0000000..adc34a6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_gram-tokens_02.adm";
+
+let $txt := "Jürgen S. Generic's Car"
+let $tokens := gram-tokens($txt, 3, true)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01.aql
new file mode 100644
index 0000000..73a1a77
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_hashed-gram-tokens_01.adm";
+
+let $txt := "Jürgen S. Generic's Car"
+let $tokens := hashed-gram-tokens($txt, 3, false)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02.aql
new file mode 100644
index 0000000..854398f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_hashed-gram-tokens_02.adm";
+
+let $txt := "Jürgen S. Generic's Car"
+let $tokens := hashed-gram-tokens($txt, 3, true)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01.aql
new file mode 100644
index 0000000..c4d2490
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_hashed-word-tokens_01.adm";
+
+let $txt := "Hello World, I would like to inform you of the importance of Foo Bar. Yes, Foo Bar. Jürgen."
+let $tokens := hashed-word-tokens($txt)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01.aql
new file mode 100644
index 0000000..c6bb819
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_word-tokens_01.adm";
+
+let $txt := "Hello World, I would like to inform you of the importance of Foo Bar. Yes, Foo Bar. Jürgen."
+let $tokens := word-tokens($txt)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02.aql
new file mode 100644
index 0000000..75b816c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/tokenizers_word-tokens_02.adm";
+
+let $txt := "ΩΣ"
+let $tokens := word-tokens($txt)
+for $token in $tokens
+return $token
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by.aql
new file mode 100644
index 0000000..278104b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by.aql
@@ -0,0 +1,44 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: double,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create nodegroup group1 if not exists on nc1;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_distinct_by.adm";
+
+for $l in dataset('LineItem')
+distinct by $l.l_returnflag, $l.l_linestatus, $l.l_shipmode
+order by $l.l_returnflag, $l.l_linestatus, $l.l_shipmode
+return {
+"l_returnflag": $l.l_returnflag,
+"l_linestatus": $l.l_linestatus,
+"l_shipmode": $l.l_shipmode
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg.aql
new file mode 100644
index 0000000..d0607bf
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg.aql
@@ -0,0 +1,26 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+use dataverse tpch;
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create nodegroup group1 if not exists on nc1;
+
+create dataset Regions_group_no_agg(RegionType)
+ partitioned by key r_regionkey on group1;
+
+write output to nc1:"rttest/tpch_group_no_agg.adm";
+
+load dataset Regions_group_no_agg
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+for $r in dataset('Regions_group_no_agg')
+group by $name := $r.r_name with $r
+order by $name
+return $name
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item.aql
new file mode 100644
index 0000000..7dea9bb
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item.aql
@@ -0,0 +1,198 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q10_returned_item.adm";
+
+
+for $locn in (
+for $l in dataset('LineItem')
+for $ocn in (
+ for $o in dataset('Orders')
+ for $c in dataset('Customer')
+ where $c.c_custkey = $o.o_custkey and $o.o_orderdate >= '1993-10-01' and $o.o_orderdate < '1994-01-01'
+ for $n in dataset('Nation')
+ where $c.c_nationkey = $n.n_nationkey
+ return {
+ "c_custkey": $c.c_custkey,
+ "c_name": $c.c_name,
+ "c_acctbal": $c.c_acctbal,
+ "n_name": $n.n_name,
+ "c_address": $c.c_address,
+ "c_phone": $c.c_phone,
+ "c_comment": $c.c_comment,
+ "o_orderkey": $o.o_orderkey
+ }
+)
+where
+ $l.l_orderkey = $ocn.o_orderkey and $l.l_returnflag = 'R'
+ return {
+ "c_custkey": $ocn.c_custkey,
+ "c_name": $ocn.c_name,
+ "c_acctbal": $ocn.c_acctbal,
+ "n_name": $ocn.n_name,
+ "c_address": $ocn.c_address,
+ "c_phone": $ocn.c_phone,
+ "c_comment": $ocn.c_comment,
+ "l_extendedprice": $l.l_extendedprice,
+ "l_discount": $l.l_discount
+ }
+)
+group by $c_custkey:=$locn.c_custkey,
+ $c_name:=$locn.c_name,
+ $c_acctbal:=$locn.c_acctbal, $c_phone:=$locn.c_phone,
+ $n_name:=$locn.n_name, $c_address:=$locn.c_address, $c_comment:=$locn.c_comment
+ with $locn
+let $revenue := sum(for $i in $locn return $i.l_extendedprice * (1 - $i.l_discount))
+order by $revenue desc
+limit 20
+return {
+ "c_custkey": $c_custkey,
+ "c_name": $c_name,
+ "revenue": $revenue,
+ "c_acctbal": $c_acctbal,
+ "n_name": $n_name,
+ "c_address": $c_address,
+ "c_phone": $c_phone,
+ "c_comment": $c_comment
+}
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock.aql
new file mode 100644
index 0000000..5545608
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock.aql
@@ -0,0 +1,173 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q11_important_stock.adm";
+
+let $sum := sum (
+for $ps in dataset('Partsupp')
+for $sn in (
+ for $s in dataset('Supplier')
+ for $n in dataset('Nation')
+ where $s.s_nationkey = $n.n_nationkey
+ return {"s_suppkey": $s.s_suppkey}
+ )
+where $ps.ps_suppkey = $sn.s_suppkey
+return $ps.ps_supplycost * $ps.ps_availqty)
+
+for $t1 in
+(
+for $ps in dataset('Partsupp')
+for $sn in (
+ for $s in dataset('Supplier')
+ for $n in dataset('Nation')
+ where $s.s_nationkey = $n.n_nationkey
+ return {"s_suppkey": $s.s_suppkey}
+)
+where $ps.ps_suppkey = $sn.s_suppkey
+group by $ps_partkey := $ps.ps_partkey with $ps
+return {"ps_partkey": $ps_partkey,
+"part_value": sum(for $i in $ps return $i.ps_supplycost * $i.ps_availqty)}
+)
+
+where $t1.part_value > $sum * 0.00001
+order by $t1.part_value desc
+return {"partkey": $t1.ps_partkey, "part_value":$t1.part_value}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping.aql
new file mode 100644
index 0000000..ac87051
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping.aql
@@ -0,0 +1,170 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q12_shipping.adm";
+
+for $l in dataset('LineItem')
+for $o in dataset('Orders')
+
+where
+$o.o_orderkey = $l.l_orderkey
+and $l.l_commitdate < $l.l_receiptdate
+and $l.l_shipdate < $l.l_commitdate
+and $l.l_receiptdate >= '1994-01-01'
+and $l.l_receiptdate < '1995-01-01'
+and ($l.l_shipmode = 'MAIL' or $l.l_shipmode = 'SHIP')
+
+group by $l_shipmode := $l.l_shipmode with $o
+order by $l_shipmode
+return {
+"l_shipmode": $l_shipmode,
+"high_line_count": sum(for $i in $o
+ return switch-case( $i.o_orderpriority ='1-URGENT' or $i.o_orderpriority ='2-HIGH',
+ true, 1,
+ false, 0)),
+"low_line_count": sum(for $i in $o
+ return switch-case( $i.o_orderpriority ='1-URGENT' or $i.o_orderpriority ='2-HIGH',
+ true, 0,
+ false, 1))
+}
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution.aql
new file mode 100644
index 0000000..a33a716
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution.aql
@@ -0,0 +1,168 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q13_customer_distribution.adm";
+
+for $gco in (
+ for $co in
+ (
+ for $c in dataset('Customer')
+ return
+ {
+ "c_custkey": $c.c_custkey,
+ "o_orderkey_count": count(
+ for $o in dataset('Orders')
+ where $c.c_custkey = $o.o_custkey and not(like($o.o_comment,'%special%requests%'))
+ return $o.o_orderkey)
+ }
+ )
+ group by $c_custkey := $co.c_custkey with $co
+ return{
+ "c_custkey": $c_custkey, "c_count": sum(for $i in $co return $i.o_orderkey_count)
+ }
+)
+
+group by $c_count := $gco.c_count with $gco
+let $custdist := count($gco)
+order by $custdist desc, $c_count desc
+return {"c_count": $c_count, "custdist": $custdist}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect.aql
new file mode 100644
index 0000000..9438746
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect.aql
@@ -0,0 +1,154 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q14_promotion_effect.adm";
+
+for $l in dataset('LineItem')
+for $p in dataset('Part')
+ where $l.l_partkey = $p.p_partkey and $l.l_shipdate >= '1995-09-01' and $l.l_shipdate < '1995-10-01'
+group by $t:=1 with $l, $p
+return 100.00 * sum( for $i in $l
+ return switch-case(like($i.p_type, 'PROMO%'),
+ true, $i.l_extendedprice*(1-$i.l_discount),
+ false, 0.0)
+ ) / sum( for $i in $l return $i.l_extendedprice * (1 - $i.l_discount))
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier.aql
new file mode 100644
index 0000000..948f466
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier.aql
@@ -0,0 +1,170 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q15_top_supplier.adm";
+
+declare function revenue(){
+for $l in dataset('LineItem')
+where $l.l_shipdate >= '1996-01-01' and $l.l_shipdate < '1996-04-01'
+group by $l_suppkey := $l.l_suppkey with $l
+return {
+"supplier_no": $l_suppkey,
+"total_revenue": sum(for $i in $l return $i.l_extendedprice * (1 - $i.l_discount))
+}
+}
+
+let $m := max(
+ for $r2 in revenue()
+ return $r2.total_revenue
+)
+
+for $s in dataset('Supplier')
+for $r in revenue()
+ where $s.s_suppkey = $r.supplier_no and $r.total_revenue=$m
+return {
+"s_suppkey": $s.s_suppkey,
+"s_name": $s.s_name,
+"s_address": $s.s_address,
+"s_phone": $s.s_phone,
+"total_revenue": $r.total_revenue
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship.aql
new file mode 100644
index 0000000..5e337d4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship.aql
@@ -0,0 +1,198 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+
+write output to nc1:"rttest/tpch_q16_parts_supplier_relationship.adm";
+
+declare function tmp(){
+for $psp in (
+ for $ps in dataset('Partsupp')
+ for $p in dataset('Part')
+ where $p.p_partkey = $ps.ps_partkey and $p.p_brand != 'Brand#45'
+ and not(like($p.p_type, 'MEDIUM POLISHED%'))
+ return
+ {
+ "p_brand": $p.p_brand,
+ "p_type": $p.p_type,
+ "p_size": $p.p_size,
+ "ps_suppkey": $ps.ps_suppkey
+ }
+)
+for $s in dataset('Supplier')
+ where $psp.ps_suppkey = $s.s_suppkey and not(like($s.s_comment, '%Customer%Complaints%'))
+return
+{
+ "p_brand": $psp.p_brand,
+ "p_type": $psp.p_type,
+ "p_size": $psp.p_size,
+ "ps_suppkey": $psp.ps_suppkey
+}
+}
+
+for $t2 in
+(
+for $t in tmp()
+ where $t.p_size = 49 or $t.p_size = 14 or $t.p_size = 23 or
+ $t.p_size = 45 or $t.p_size = 19 or $t.p_size = 3 or
+ $t.p_size = 36 or $t.p_size = 9
+group by $p_brand1:= $t.p_brand, $p_type1 := $t.p_type,
+ $p_size1:= $t.p_size, $ps_suppkey1:=$t.ps_suppkey with $t
+return
+{
+"p_brand": $p_brand1,
+ "p_type": $p_type1,
+ "p_size": $p_size1,
+ "ps_suppkey": $ps_suppkey1
+} )
+group by $p_brand := $t2.p_brand, $p_type := $t2.p_type, $p_size := $t2.p_size with $t2
+let $supplier_cnt := count(for $i in $t2 return $i.ps_suppkey)
+order by $supplier_cnt desc, $p_brand, $p_type, $p_size
+return {
+"p_brand": $p_brand,
+"p_type": $p_type,
+"p_size": $p_size,
+"supplier_cnt": $supplier_cnt
+}
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue.aql
new file mode 100644
index 0000000..d631abc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue.aql
@@ -0,0 +1,164 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q17_small_quantity_order_revenue.adm";
+
+declare function tmp(){
+for $l in dataset('LineItem')
+group by $l_partkey := $l.l_partkey with $l
+return {
+"t_partkey": $l_partkey,
+"t_avg_quantity": 0.2 * avg(for $i in $l return $i.l_quantity)
+}
+}
+
+sum(
+for $l in dataset('LineItem')
+for $p in dataset('Part')
+where $p.p_partkey = $l.l_partkey and $p.p_container = 'MED BOX'
+
+for $t in tmp()
+where $l.l_partkey = $t.t_partkey and $l.l_quantity < $t.t_avg_quantity
+return $l.l_extendedprice
+)/7.0
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer.aql
new file mode 100644
index 0000000..7f55551
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer.aql
@@ -0,0 +1,175 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q18_large_volume_customer.adm";
+
+for $c in dataset('Customer')
+for $o in dataset('Orders')
+where
+ $c.c_custkey = $o.o_custkey
+for $t in
+(
+ for $l in dataset('LineItem')
+ group by $l_orderkey := $l.l_orderkey with $l
+ return
+ { "l_orderkey": $l_orderkey,
+ "t_sum_quantity": sum(for $i in $l return $i.l_quantity) }
+)
+where
+ $o.o_orderkey = $t.l_orderkey and $t.t_sum_quantity > 30
+for $l in dataset('LineItem')
+where
+ $l.l_orderkey = $o.o_orderkey
+group by $c_name := $c.c_name, $c_custkey := $c.c_custkey, $o_orderkey := $o.o_orderkey,
+ $o_orderdate := $o.o_orderdate, $o_totalprice := $o.o_totalprice with $l
+order by $o_totalprice desc, $o_orderdate
+limit 100
+return {
+ "c_name": $c_name,
+ "c_custkey": $c_custkey,
+ "o_orderkey": $o_orderkey,
+ "o_orderdate": $o_orderdate,
+ "o_totalprice": $o_totalprice,
+ "sum_quantity": sum(for $j in $l return $j.l_quantity)
+}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue.aql
new file mode 100644
index 0000000..cbd9d53
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue.aql
@@ -0,0 +1,178 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q19_discounted_revenue.adm";
+
+sum(
+for $l in dataset('LineItem')
+for $p in dataset('Part')
+where $p.p_partkey = $l.l_partkey
+and (
+ (
+ $p.p_brand = 'Brand#12'
+ and reg-exp($p.p_container,'SM CASE||SM BOX||SM PACK||SM PKG')
+ and $l.l_quantity >= 1 and $l.l_quantity <= 11
+ and $p.p_size >= 1 and $p.p_size <= 5
+ and reg-exp($l.l_shipmode, 'AIR||AIR REG')
+ and $l.l_shipinstruct = 'DELIVER IN PERSON'
+ )
+ or
+ (
+ $p.p_brand = 'Brand#23'
+ and reg-exp($p.p_container, 'MED BAG||MED BOX||MED PKG||MED PACK')
+ and $l.l_quantity >= 10 and $l.l_quantity <= 20
+ and $p.p_size >= 1 and $p.p_size <= 10
+ and reg-exp($l.l_shipmode, 'AIR||AIR REG')
+ and $l.l_shipinstruct = 'DELIVER IN PERSON'
+ )
+ or
+ (
+ $p.p_brand = 'Brand#34'
+ and reg-exp($p.p_container, 'LG CASE||LG BOX||LG PACK||LG PKG')
+ and $l.l_quantity >= 20 and $l.l_quantity <= 30
+ and $p.p_size >= 1 and $p.p_size <= 15
+ and reg-exp($l.l_shipmode, 'AIR||AIR REG')
+ and $l.l_shipinstruct = 'DELIVER IN PERSON'
+ )
+ )
+return $l.l_extendedprice * (1 - $l.l_discount)
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt.aql
new file mode 100644
index 0000000..2d2e3c4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt.aql
@@ -0,0 +1,54 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: double,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create nodegroup group1 if not exists on nc1;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q1_pricing_summary_report_nt.adm";
+
+for $l in dataset('LineItem')
+where $l.l_shipdate <= '1998-09-02'
+/*+ hash*/
+group by $l_returnflag := $l.l_returnflag, $l_linestatus := $l.l_linestatus
+ with $l
+order by $l_returnflag, $l_linestatus
+return {
+ "l_returnflag": $l_returnflag,
+ "l_linestatus": $l_linestatus,
+ "sum_qty": sum(for $i in $l return $i.l_quantity),
+ "sum_base_price": sum(for $i in $l return $i.l_extendedprice),
+ "sum_disc_price": sum(for $i in $l return $i.l_extendedprice * (1 - $i.l_discount)),
+ "sum_charge": sum(for $i in $l return $i.l_extendedprice * (1 - $i.l_discount) * (1 + $i.l_tax)),
+ "ave_qty": avg(for $i in $l return $i.l_quantity),
+ "ave_price": avg(for $i in $l return $i.l_extendedprice),
+ "ave_disc": avg(for $i in $l return $i.l_discount),
+ "count_order": count($l)
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion.aql
new file mode 100644
index 0000000..091dda6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion.aql
@@ -0,0 +1,182 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q20_potential_part_promotion.adm";
+
+for $t3 in (
+for $t2 in (
+ for $l in dataset('LineItem')
+ group by $l_partkey:=$l.l_partkey, $l_suppkey:=$l.l_suppkey with $l
+ return {
+ "l_partkey": $l_partkey,
+ "l_suppkey": $l_suppkey,
+ "sum_quantity": 0.5 * sum(for $i in $l return $i.l_quantity)
+})
+for $pst1 in (
+ for $ps in dataset('Partsupp')
+ for $t1 in
+ (
+ for $p in dataset('Part')
+ distinct by $p.p_partkey
+ return {"p_partkey": $p.p_partkey}
+ )
+ where $ps.ps_partkey = $t1.p_partkey
+ return {"ps_suppkey": $ps.ps_suppkey, "ps_partkey": $ps.ps_partkey, "ps_availqty": $ps.ps_availqty}
+)
+where $pst1.ps_partkey = $t2.l_partkey and $pst1.ps_suppkey = $t2.l_suppkey
+ and $pst1.ps_availqty > $t2.sum_quantity
+distinct by $pst1.ps_suppkey
+return {"ps_suppkey": $pst1.ps_suppkey}
+)
+
+for $t4 in (
+ for $n in dataset('Nation')
+ for $s in dataset('Supplier')
+ where $s.s_nationkey = $n.n_nationkey
+ return {"s_name": $s.s_name, "s_address": $s.s_address, "s_suppkey": $s.s_suppkey}
+)
+
+where $t3.ps_suppkey = $t4.s_suppkey
+order by $t4.s_name
+return {"s_name": $t4.s_name, "s_address": $t4.s_address}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting.aql
new file mode 100644
index 0000000..e8bf676
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting.aql
@@ -0,0 +1,222 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q21_suppliers_who_kept_orders_waiting.adm";
+
+
+declare function tmp1()
+{
+for $l2 in
+(
+ for $l in dataset('LineItem')
+ group by $l_orderkey1 := $l.l_orderkey, $l_suppkey1 := $l.l_suppkey with $l
+ return {
+ "l_orderkey": $l_orderkey1,
+ "l_suppkey": $l_suppkey1
+ }
+)
+group by $l_orderkey := $l2.l_orderkey with $l2
+return {
+ "l_orderkey": $l_orderkey,
+ "count_suppkey": count(for $i in $l2 return $i.l_suppkey),
+ "max_suppkey": max(for $i in $l2 return $i.l_suppkey)
+}
+}
+
+declare function tmp2()
+{
+for $l2 in
+(
+ for $l in dataset('LineItem')
+ where $l.l_receiptdate > $l.l_commitdate
+ group by $l_orderkey1 := $l.l_orderkey, $l_suppkey1 := $l.l_suppkey with $l
+ return {
+ "l_orderkey": $l_orderkey1,
+ "l_suppkey": $l_suppkey1
+ }
+)
+group by $l_orderkey := $l2.l_orderkey with $l2
+return {
+"l_orderkey": $l_orderkey,
+"count_suppkey": count(for $i in $l2 return $i.l_suppkey),
+"max_suppkey": max(for $i in $l2 return $i.l_suppkey)
+}
+}
+
+for $t4 in (
+for $t3 in (
+ for $l in dataset('LineItem')
+ for $ns in (
+ for $n in dataset('Nation')
+ for $s in dataset('Supplier')
+ where $s.s_nationkey = $n.n_nationkey
+ return {"s_name": $s.s_name, "s_suppkey": $s.s_suppkey}
+ )
+ where $ns.s_suppkey = $l.l_suppkey and $l.l_receiptdate > $l.l_commitdate
+
+ for $o in dataset('Orders')
+ where $o.o_orderkey = $l.l_orderkey
+
+ for $t1 in tmp1()
+ where $l.l_orderkey = $t1.l_orderkey
+
+ return {"s_name": $ns.s_name, "l_orderkey": $t1.l_orderkey, "l_suppkey": $l.l_suppkey}
+)
+
+for $t2 in tmp2()
+ where $t2.count_suppkey >= 0 and $t3.l_orderkey = $t2.l_orderkey
+
+return {
+"s_name": $t3.s_name,
+"l_suppkey": $t3.l_suppkey,
+"l_orderkey": $t2.l_orderkey,
+"count_suppkey": $t2.count_suppkey,
+"max_suppkey": $t2.max_suppkey
+} )
+group by $s_name := $t4.s_name with $t4
+let $numwait := count($t4)
+order by $numwait desc, $s_name
+return {
+"s_name": $s_name,
+"numwait": $numwait
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity.aql
new file mode 100644
index 0000000..3f96e89
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity.aql
@@ -0,0 +1,174 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q22_global_sales_opportunity.adm";
+
+
+declare function q22_customer_tmp(){
+for $c in dataset('Customer')
+return {
+"c_acctbal": $c.c_acctbal,
+"c_custkey": $c.c_custkey,
+"cntrycode": substring($c.c_phone, 1, 2)
+}
+}
+
+
+let $avg := avg( for $c in dataset('Customer')
+ where $c.c_acctbal > 0.00
+ return $c.c_acctbal
+ )
+for $ct in q22_customer_tmp()
+where $ct.c_acctbal > $avg
+
+group by $cntrycode := $ct.cntrycode with $ct
+order by $cntrycode
+
+return {
+"cntrycode": $cntrycode,
+"numcust": count($ct),
+"totacctbal": sum(for $i in $ct return $i.c_acctbal)
+}
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier.aql
new file mode 100644
index 0000000..1b87727
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier.aql
@@ -0,0 +1,245 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q2_minimum_cost_supplier.adm";
+
+declare function tmp1(){
+for $p in dataset('Part')
+for $pssrn in
+(
+ for $ps in dataset('Partsupp')
+ for $srn in
+ (
+ for $s in dataset('Supplier')
+ for $rn in
+ (
+ for $r in dataset('Region')
+ for $n in dataset('Nation')
+ where $n.n_regionkey = $r.r_regionkey and $r.r_name = 'EUROPE'
+ return {"n_nationkey": $n.n_nationkey, "n_name": $n.n_name}
+ )
+ where $s.s_nationkey = $rn.n_nationkey
+ return {"s_suppkey": $s.s_suppkey, "n_name": $rn.n_name,
+ "s_name": $s.s_name,
+ "s_acctbal": $s.s_acctbal,
+ "s_address": $s.s_address,
+ "s_phone": $s.s_phone,
+ "s_comment": $s.s_comment}
+ )
+ where $srn.s_suppkey = $ps.ps_suppkey
+ return {"n_name": $srn.n_name, "p_partkey": $ps.ps_partkey, "ps_supplycost": $ps.ps_supplycost,
+ "s_name": $srn.s_name,
+ "s_acctbal": $srn.s_acctbal,
+ "s_address": $srn.s_address,
+ "s_phone": $srn.s_phone,
+ "s_comment": $srn.s_comment}
+)
+where $p.p_partkey = $pssrn.p_partkey and like($p.p_type, '%BRASS')
+return
+{"s_acctbal": $pssrn.s_acctbal,
+"s_name": $pssrn.s_name,
+"n_name": $pssrn.n_name,
+"p_partkey": $p.p_partkey,
+"ps_supplycost": $pssrn.ps_supplycost,
+"p_mfgr": $p.p_mfgr,
+"s_address": $pssrn.s_address,
+"s_phone": $pssrn.s_phone,
+"s_comment": $pssrn.s_comment
+}
+}
+
+declare function tmp2(){
+for $p in dataset('Part')
+for $pssrn in
+(
+ for $ps in dataset('Partsupp')
+ for $srn in
+ (
+ for $s in dataset('Supplier')
+ for $rn in
+ (
+ for $r in dataset('Region')
+ for $n in dataset('Nation')
+ where $n.n_regionkey = $r.r_regionkey and $r.r_name = 'EUROPE'
+ return {"n_nationkey": $n.n_nationkey, "n_name": $n.n_name}
+ )
+ where $s.s_nationkey = $rn.n_nationkey
+ return {"s_suppkey": $s.s_suppkey, "n_name": $rn.n_name,
+ "s_name": $s.s_name,
+ "s_acctbal": $s.s_acctbal,
+ "s_address": $s.s_address,
+ "s_phone": $s.s_phone,
+ "s_comment": $s.s_comment}
+ )
+ where $srn.s_suppkey = $ps.ps_suppkey
+ return {"n_name": $srn.n_name, "p_partkey": $ps.ps_partkey, "ps_supplycost": $ps.ps_supplycost,
+ "s_name": $srn.s_name,
+ "s_acctbal": $srn.s_acctbal,
+ "s_address": $srn.s_address,
+ "s_phone": $srn.s_phone,
+ "s_comment": $srn.s_comment}
+)
+where $p.p_partkey = $pssrn.p_partkey and like($p.p_type, '%BRASS')
+/*+ hash*/
+group by $p_partkey := $pssrn.p_partkey
+with $pssrn
+return {"p_partkey": $p_partkey,
+"ps_min_supplycost": min(for $i in $pssrn return $i.ps_supplycost)
+}
+}
+
+for $t2 in tmp2()
+for $t1 in tmp1()
+where $t1.p_partkey = $t2.p_partkey and $t1.ps_supplycost = $t2.ps_min_supplycost
+order by $t1.s_acctbal desc, $t1.n_name, $t1.s_name, $t1.p_partkey
+limit 100
+return
+{
+"s_acctbal":$t1.s_acctbal,
+"s_name":$t1.s_name,
+"n_name":$t1.n_name,
+"p_partkey":$t1.p_partkey,
+"p_mfgr":$t1.p_mfgr,
+"s_address":$t1.s_address,
+"s_phone":$t1.s_phone,
+"s_comment":$t1.s_comment
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt.aql
new file mode 100644
index 0000000..3152a4b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt.aql
@@ -0,0 +1,148 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q3_shipping_priority_nt.adm";
+
+for $c in dataset('Customer')
+for $o in dataset('Orders')
+where
+ $c.c_mktsegment = 'BUILDING' and $c.c_custkey = $o.o_custkey
+for $l in dataset('LineItem')
+where
+ $l.l_orderkey = $o.o_orderkey and
+ $o.o_orderdate < '1995-03-15' and $l.l_shipdate > '1995-03-15'
+/*+ hash*/
+group by $l_orderkey := $l.l_orderkey, $o_orderdate := $o.o_orderdate, $o_shippriority := $o.o_shippriority
+ with $l
+let $revenue := sum (
+ for $i in $l
+ return
+ $i.l_extendedprice * (1 - $i.l_discount)
+)
+order by $revenue desc, $o_orderdate
+limit 10
+return {
+ "l_orderkey": $l_orderkey,
+ "revenue": $revenue,
+ "o_orderdate": $o_orderdate,
+ "o_shippriority": $o_shippriority
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority.aql
new file mode 100644
index 0000000..a616f1c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority.aql
@@ -0,0 +1,166 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q4_order_priority.adm";
+
+declare function tmp()
+{
+for $l in dataset('LineItem')
+where $l.l_commitdate<$l.l_receiptdate
+distinct by $l.l_orderkey
+return {"o_orderkey": $l.l_orderkey}
+}
+
+for $o in dataset('Orders')
+for $t in tmp()
+where
+$o.o_orderkey = $t.o_orderkey and
+$o.o_orderdate >= '1993-07-01' and $o.o_orderdate < '1993-10-01'
+group by $o_orderpriority := $o.o_orderpriority
+with $o
+order by $o_orderpriority
+return
+{
+"order_priority": $o_orderpriority,
+"count": count($o)
+}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume.aql
new file mode 100644
index 0000000..3a5650f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume.aql
@@ -0,0 +1,180 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q5_local_supplier_volume.adm";
+
+
+
+for $c in dataset('Customer')
+for $o1 in
+( for $o in dataset('Orders')
+ for $l1 in (
+ for $l in dataset('LineItem')
+ for $s1 in
+ ( for $s in dataset('Supplier')
+ for $n1 in
+ ( for $n in dataset('Nation')
+ for $r in dataset('Region')
+ where $n.n_regionkey = $r.r_regionkey
+ return
+ {"n_name": $n.n_name, "n_nationkey": $n.n_nationkey} )
+ where $s.s_nationkey = $n1.n_nationkey
+ return
+ { "n_name": $n1.n_name, "s_suppkey": $s.s_suppkey, "s_nationkey": $s.s_nationkey } )
+ where $l.l_suppkey = $s1.s_suppkey
+ return
+ { "n_name": $s1.n_name, "l_extendedprice": $l.l_extendedprice, "l_discount": $l.l_discount, "l_orderkey": $l.l_orderkey, "s_nationkey": $s1.s_nationkey } )
+ where $l1.l_orderkey = $o.o_orderkey and $o.o_orderdate >= '1990-01-01' and $o.o_orderdate < '1995-01-01'
+ return
+ { "n_name": $l1.n_name, "l_extendedprice": $l1.l_extendedprice, "l_discount": $l1.l_discount, "s_nationkey": $l1.s_nationkey, "o_custkey": $o.o_custkey } )
+where $c.c_nationkey = $o1.s_nationkey and $c.c_custkey = $o1.o_custkey
+/*+ hash*/
+group by $n_name := $o1.n_name with $o1
+let $revenue := sum (
+ for $i in $o1
+ return
+ $i.l_extendedprice * (1 - $i.l_discount)
+)
+order by $revenue desc
+return
+ { "n_name": $n_name, "revenue": $revenue }
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change.aql
new file mode 100644
index 0000000..ea05231
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change.aql
@@ -0,0 +1,156 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q6_forecast_revenue_change.adm";
+
+let $revenue := sum(
+for $l in dataset('LineItem')
+where
+ $l.l_shipdate >= '1994-01-01'
+ and $l.l_shipdate < '1995-01-01'
+ and $l.l_discount >= 0.05 and $l.l_discount <= 0.07
+ and $l.l_quantity < 24
+return $l.l_extendedprice * $l.l_discount
+)
+return {
+"revenue": $revenue
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping.aql
new file mode 100644
index 0000000..c603a75
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping.aql
@@ -0,0 +1,212 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q7_volume_shipping.adm";
+
+declare function q7_volume_shipping_tmp(){
+for $n1 in dataset('Nation')
+for $n2 in dataset('Nation')
+ where $n2.n_name='GERMANY' or $n1.n_name='GERMANY'
+return
+{
+ "supp_nation": $n1.n_name,
+ "cust_nation": $n2.n_name,
+ "s_nationkey": $n1.n_nationkey,
+ "c_nationkey": $n2.n_nationkey
+}
+}
+
+for $locs in (
+ for $loc in (
+ for $lo in
+ (
+ for $l in dataset('LineItem')
+ for $o in dataset('Orders')
+ where
+ $o.o_orderkey = $l.l_orderkey and $l.l_shipdate >= '1992-01-01'
+ and $l.l_shipdate <= '1996-12-31'
+ return
+ {
+ "l_shipdate": $l.l_shipdate,
+ "l_extendedprice": $l.l_extendedprice,
+ "l_discount": $l.l_discount,
+ "l_suppkey": $l.l_suppkey,
+ "o_custkey": $o.o_custkey
+ }
+ )
+ for $c in dataset('Customer')
+ where
+ $c.c_custkey = $lo.o_custkey
+ return
+ {
+ "l_shipdate": $lo.l_shipdate,
+ "l_extendedprice": $lo.l_extendedprice,
+ "l_discount": $lo.l_discount,
+ "l_suppkey": $lo.l_suppkey,
+ "c_nationkey": $c.c_nationkey
+ }
+ )
+ for $s in dataset('Supplier')
+ where
+ $s.s_suppkey = $loc.l_suppkey
+ return {
+ "l_shipdate": $loc.l_shipdate,
+ "l_extendedprice": $loc.l_extendedprice,
+ "l_discount": $loc.l_discount,
+ "c_nationkey": $loc.c_nationkey,
+ "s_nationkey": $s.s_nationkey
+ }
+)
+for $t in q7_volume_shipping_tmp()
+where
+ $locs.c_nationkey = $t.c_nationkey and $locs.s_nationkey = $t.s_nationkey
+let $l_year0 := year($locs.l_shipdate)
+group by $supp_nation := $t.supp_nation, $cust_nation := $t.cust_nation, $l_year := $l_year0
+with $locs
+let $revenue := sum(for $i in $locs return $i.l_extendedprice * (1 - $i.l_discount))
+order by $supp_nation, $cust_nation, $l_year
+return {
+ "supp_nation": $supp_nation,
+ "cust_nation": $cust_nation,
+ "l_year": $l_year,
+ "revenue": $revenue
+}
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share.aql
new file mode 100644
index 0000000..bea39bf
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share.aql
@@ -0,0 +1,215 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset Partsupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Partsupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+write output to nc1:"rttest/tpch_q8_national_market_share.adm";
+
+
+for $t in (
+for $slnrcop in
+(for $s in dataset("Supplier")
+for $lnrcop in
+(
+for $lnrco in
+(
+for $l in dataset('LineItem')
+for $nrco in (
+ for $o in dataset('Orders')
+ for $nrc in (
+ for $c in dataset('Customer')
+ for $nr in (
+ for $n1 in dataset('Nation')
+ for $r1 in dataset('Region')
+ where $n1.n_regionkey = $r1.r_regionkey and $r1.r_name = 'AMERICA'
+ return {"n_nationkey": $n1.n_nationkey}
+ )
+ where $c.c_nationkey = $nr.n_nationkey
+ return {"c_custkey": $c.c_custkey}
+ )
+ where $nrc.c_custkey = $o.o_custkey
+ return {
+ "o_orderdate" : $o.o_orderdate,
+ "o_orderkey": $o.o_orderkey
+ }
+)
+where $l.l_orderkey = $nrco.o_orderkey and $nrco.o_orderdate >= '1995-01-01'
+ and $nrco.o_orderdate < '1996-12-31'
+return {
+ "o_orderdate": $nrco.o_orderdate,
+ "l_partkey": $l.l_partkey,
+ "l_discount": $l.l_discount,
+ "l_extendedprice": $l.l_extendedprice,
+ "l_suppkey": $l.l_suppkey
+})
+for $p in dataset("Part")
+where $p.p_partkey = $lnrco.l_partkey and $p.p_type = 'ECONOMY ANODIZED STEEL'
+return {
+ "o_orderdate": $lnrco.o_orderdate,
+ "l_discount": $lnrco.l_discount,
+ "l_extendedprice": $lnrco.l_extendedprice,
+ "l_suppkey": $lnrco.l_suppkey
+}
+)
+where $s.s_suppkey = $lnrcop.l_suppkey
+return {
+ "o_orderdate": $lnrcop.o_orderdate,
+ "l_discount": $lnrcop.l_discount,
+ "l_extendedprice": $lnrcop.l_extendedprice,
+ "l_suppkey": $lnrcop.l_suppkey,
+ "s_nationkey": $s.s_nationkey
+})
+
+for $n2 in dataset('Nation')
+where $slnrcop.s_nationkey = $n2.n_nationkey
+let $o_year := year($slnrcop.o_orderdate)
+return {
+ "year": $o_year,
+ "revenue": $slnrcop.l_extendedprice *(1-$slnrcop.l_discount),
+ "s_name": $n2.n_name
+})
+group by $year := $t.year with $t
+order by $year
+return {
+ "year": $year,
+ "mkt_share":sum(for $i in $t return switch-case($i.s_name='BRAZIL', true, $i.revenue, false, 0.0))/
+ sum(for $i in $t return $i.revenue)
+}
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt.aql
new file mode 100644
index 0000000..9d83747
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt.aql
@@ -0,0 +1,184 @@
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+ l_orderkey: int32,
+ l_partkey: int32,
+ l_suppkey: int32,
+ l_linenumber: int32,
+ l_quantity: int32,
+ l_extendedprice: double,
+ l_discount: double,
+ l_tax: double,
+ l_returnflag: string,
+ l_linestatus: string,
+ l_shipdate: string,
+ l_commitdate: string,
+ l_receiptdate: string,
+ l_shipinstruct: string,
+ l_shipmode: string,
+ l_comment: string
+}
+
+create type OrderType as closed {
+ o_orderkey: int32,
+ o_custkey: int32,
+ o_orderstatus: string,
+ o_totalprice: double,
+ o_orderdate: string,
+ o_orderpriority: string,
+ o_clerk: string,
+ o_shippriority: int32,
+ o_comment: string
+}
+
+create type CustomerType as closed {
+ c_custkey: int32,
+ c_name: string,
+ c_address: string,
+ c_nationkey: int32,
+ c_phone: string,
+ c_acctbal: double,
+ c_mktsegment: string,
+ c_comment: string
+}
+
+create type SupplierType as closed {
+ s_suppkey: int32,
+ s_name: string,
+ s_address: string,
+ s_nationkey: int32,
+ s_phone: string,
+ s_acctbal: double,
+ s_comment: string
+}
+
+create type NationType as closed {
+ n_nationkey: int32,
+ n_name: string,
+ n_regionkey: int32,
+ n_comment: string
+}
+
+create type RegionType as closed {
+ r_regionkey: int32,
+ r_name: string,
+ r_comment: string
+}
+
+create type PartType as closed {
+ p_partkey: int32,
+ p_name: string,
+ p_mfgr: string,
+ p_brand: string,
+ p_type: string,
+ p_size: int32,
+ p_container: string,
+ p_retailprice: double,
+ p_comment: string
+}
+
+create type PartSuppType as closed {
+ ps_partkey: int32,
+ ps_suppkey: int32,
+ ps_availqty: int32,
+ ps_supplycost: double,
+ ps_comment: string
+}
+
+create nodegroup group1 if not exists on nc1, nc2;
+
+create dataset LineItem(LineItemType)
+ partitioned by key l_orderkey, l_linenumber on group1;
+create dataset Orders(OrderType)
+ partitioned by key o_orderkey on group1;
+create dataset Supplier(SupplierType)
+ partitioned by key s_suppkey on group1;
+create dataset Region(RegionType)
+ partitioned by key r_regionkey on group1;
+create dataset Nation(NationType)
+ partitioned by key n_nationkey on group1;
+create dataset Part(PartType)
+ partitioned by key p_partkey on group1;
+create dataset PartSupp(PartSuppType)
+ partitioned by key ps_partkey, ps_suppkey on group1;
+create dataset Customer(CustomerType)
+ partitioned by key c_custkey on group1;
+
+load dataset LineItem
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Supplier
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/supplier.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Region
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/region.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Nation
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/nation.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Part
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/part.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset PartSupp
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/partsupp.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+load dataset Customer
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/customer.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+
+write output to nc1:"rttest/tpch_q9_product_type_profit_nt.adm";
+
+
+for $profit in
+( for $o in dataset('Orders')
+ for $l3 in
+ ( for $p in dataset('Part')
+ for $l2 in
+ ( for $ps in dataset('PartSupp')
+ for $l1 in
+ ( for $s1 in
+ ( for $s in dataset('Supplier')
+ for $n in dataset('Nation')
+ where $n.n_nationkey = $s.s_nationkey
+ return
+ { "s_suppkey": $s.s_suppkey, "n_name": $n.n_name} )
+ for $l in dataset('LineItem')
+ where $s1.s_suppkey = $l.l_suppkey
+ return
+ { "l_suppkey": $l.l_suppkey, "l_extendedprice": $l.l_extendedprice, "l_discount": $l.l_discount,
+ "l_quantity": $l.l_quantity, "l_partkey": $l.l_partkey, "l_orderkey": $l.l_orderkey, "n_name": $s1.n_name } )
+ where $ps.ps_suppkey = $l1.l_suppkey and $ps.ps_partkey = $l1.l_partkey
+ return
+ { "l_extendedprice": $l1.l_extendedprice, "l_discount": $l1.l_discount, "l_quantity": $l1.l_quantity,
+ "l_partkey": $l1.l_partkey, "l_orderkey": $l1.l_orderkey, "n_name": $l1.n_name, "ps_supplycost": $ps.ps_supplycost } )
+ where contains($p.p_name, 'green') and $p.p_partkey = $l2.l_partkey
+ return
+ { "l_extendedprice": $l2.l_extendedprice, "l_discount": $l2.l_discount, "l_quantity": $l2.l_quantity,
+ "l_orderkey": $l2.l_orderkey, "n_name": $l2.n_name, "ps_supplycost": $l2.ps_supplycost } )
+ where $o.o_orderkey = $l3.l_orderkey
+ let $amount := $l3.l_extendedprice * (1 - $l3.l_discount) - $l3.ps_supplycost * $l3.l_quantity
+ let $o_year := year($o.o_orderdate)
+ return
+ { "nation": $l3.n_name, "o_year": $o_year, "amount": $amount } )
+ group by $nation := $profit.nation, $o_year := $profit.o_year with $profit
+ order by $nation, $o_year desc
+ return
+ { "nation": $nation,
+ "o_year": $o_year,
+ "sum_profit": sum( for $pr in $profit return $pr.amount ) }
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/writers/print_01.aql b/asterix-app/src/test/resources/runtimets/queries/writers/print_01.aql
new file mode 100644
index 0000000..dcdc3ee
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/writers/print_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/writers_print_01.adm" using "edu.uci.ics.hyracks.algebricks.core.algebra.runtime.writers.PrinterBasedWriterFactory";
+
+for $x in ["foo", "bar"]
+return $x
diff --git a/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01.aql b/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01.aql
new file mode 100644
index 0000000..fd35a0f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+write output to nc1:"rttest/writers_serialized_01.adm" using "edu.uci.ics.hyracks.algebricks.core.algebra.runtime.writers.SerializedDataWriterFactory";
+
+for $x in ["foo", "bar"]
+return $x
diff --git a/asterix-app/src/test/resources/runtimets/queries/year_01.aql b/asterix-app/src/test/resources/runtimets/queries/year_01.aql
new file mode 100644
index 0000000..da93e96
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/year_01.aql
@@ -0,0 +1,6 @@
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/year_01.adm";
+
+year("1996-12-01")