Merged asterix_statement_model_fix into asterix_stabilization
1) Asterix now has a revised statement model. 
  a) Each statement (definition includes a query) is executed as an independent transaction.
  b) Statements are executed in the order of submission with no implicit re-orderings.
  c) Asterix does not differentiate between DDL and DML statements. This is unlike the previous model which executed DDL statements prior to DML statements.
  d) Asterix bails out at the failure in execution of a statement. As stated in (a), the failing statement is rolled back and has no impact on previously executed statements.
  e) Forward references during type creation are not supported. This is not a regression, as these did not work in the previous model either.
  f) Amongst the submitted statements, you could have multiple queries.

2) Asterix has support for AQL bodied functions. You can create AQL bodied fucntions and may use them in subsequent sessions. 

3) Asterix has support for cross dataverse statements. You can invoke statements/queries that refer to entities belonging to different dataverses. 

4) Other Issues resolved: 25, 62, 100, 124, 148, 165, 202  


git-svn-id: https://asterixdb.googlecode.com/svn/branches/asterix_stabilization@860 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01.aql
new file mode 100644
index 0000000..e95d102
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01.aql
@@ -0,0 +1,50 @@
+/*
+ * Description  : Test cross dataverse functionality
+ *              : use dataverse statement is now optional.
+ *              : Use fully qualified names to access datasets.
+ * Expected Res : Success
+ * Date         : 29th Aug 2012
+ */
+
+drop dataverse student if exists;
+drop dataverse teacher if exists;
+
+create dataverse student;
+create dataverse teacher;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv01.adm";
+
+create type student.stdType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create type teacher.tchrType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create dataset student.ugdstd(stdType) partitioned by key id;
+create dataset student.gdstd(stdType) partitioned by key id;
+create dataset teacher.prof(tchrType) partitioned by key id;
+create dataset teacher.pstdoc(tchrType) partitioned by key id;
+
+insert into dataset student.ugdstd({"id":457,"name":"John Doe","age":22,"sex":"M","dept":"Dance"});
+
+insert into dataset student.gdstd({"id":418,"name":"John Smith","age":26,"sex":"M","dept":"Economics"});
+
+insert into dataset teacher.prof({"id":152,"name":"John Meyer","age":42,"sex":"M","dept":"History"});
+
+insert into dataset teacher.pstdoc({"id":259,"name":"Sophia Reece","age":36,"sex":"F","dept":"Anthropology"});
+
+for $s in dataset('student.ugdstd')
+for $p in dataset('teacher.prof')
+for $a in dataset('student.gdstd')
+for $b in dataset('teacher.pstdoc')
+return {"ug-student":$s,"prof":$p,"grd-student":$a,"postdoc":$b}
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02.aql
new file mode 100644
index 0000000..1257cac
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02.aql
@@ -0,0 +1,48 @@
+/*
+ * Description  : Test cross dataverse functionality
+ *              : use dataverse statement is now optional.
+ *              : Use fully qualified names to create datasets, types and query Metadata to verify.
+ * Expected Res : Success
+ * Date         : 28th Aug 2012
+ */
+
+drop dataverse student if exists;
+drop dataverse teacher if exists;
+
+create dataverse student;
+create dataverse teacher;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv02.adm";
+
+create type student.stdType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create type teacher.tchrType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create dataset student.ugdstd(stdType) partitioned by key id;
+create dataset student.gdstd(stdType) partitioned by key id;
+create dataset teacher.prof(tchrType) partitioned by key id;
+create dataset teacher.pstdoc(tchrType) partitioned by key id;
+
+insert into dataset student.ugdstd({"id":457,"name":"John Doe","age":22,"sex":"M","dept":"Dance"});
+
+insert into dataset student.gdstd({"id":418,"name":"John Smith","age":26,"sex":"M","dept":"Economics"});
+
+insert into dataset teacher.prof({"id":152,"name":"John Meyer","age":42,"sex":"M","dept":"History"});
+
+insert into dataset teacher.pstdoc({"id":259,"name":"Sophia Reece","age":36,"sex":"F","dept":"Anthropology"});
+
+for $l in dataset('Metadata.Dataset')
+where $l.DataverseName='student' or $l.DataverseName='teacher'
+return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03.aql
new file mode 100644
index 0000000..0c80540
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03.aql
@@ -0,0 +1,49 @@
+/*
+ * Description  : Test cross dataverse functionality
+ *              : use dataverse statement is now optional.
+ *              : Use fully qualified names to create datasets, types.
+ *              : drop datasets using fully qualified names
+ *              : Query metadata to verify datasets are dropped.
+ * Expected Res : Success
+ * Date         : 28th Aug 2012
+ */
+
+drop dataverse student if exists;
+drop dataverse teacher if exists;
+
+create dataverse student;
+create dataverse teacher;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv03.adm";
+
+create type student.stdType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create type teacher.tchrType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create dataset student.ugdstd(stdType) partitioned by key id;
+create dataset student.gdstd(stdType) partitioned by key id;
+create dataset teacher.prof(tchrType) partitioned by key id;
+create dataset teacher.pstdoc(tchrType) partitioned by key id;
+
+drop dataset student.ugdstd;
+drop dataset student.gdstd;
+drop dataset teacher.prof;
+drop dataset teacher.pstdoc;
+
+count(
+for $l in dataset('Metadata.Dataset')
+where $l.DataverseName='student' or $l.DataverseName='teacher'
+return $l
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04.aql
new file mode 100644
index 0000000..20be103
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04.aql
@@ -0,0 +1,53 @@
+/*
+ * Description  : Test cross dataverse functionality
+ *              : use dataverse statement is now optional.
+ *              : Use fully qualified names to create datasets, types.
+ *              : drop datasets using fully qualified names
+ *              : re create the datasets 
+ *              : Query metadata to verify datasets are created.
+ * Expected Res : Success
+ * Date         : 28th Aug 2012
+ */
+
+drop dataverse student if exists;
+drop dataverse teacher if exists;
+
+create dataverse student;
+create dataverse teacher;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv04.adm";
+
+create type student.stdType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create type teacher.tchrType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create dataset student.ugdstd(stdType) partitioned by key id;
+create dataset student.gdstd(stdType) partitioned by key id;
+create dataset teacher.prof(tchrType) partitioned by key id;
+create dataset teacher.pstdoc(tchrType) partitioned by key id;
+
+drop dataset student.ugdstd;
+drop dataset student.gdstd;
+drop dataset teacher.prof;
+drop dataset teacher.pstdoc;
+
+create dataset student.ugdstd(stdType) partitioned by key id;
+create dataset student.gdstd(stdType) partitioned by key id;
+create dataset teacher.prof(tchrType) partitioned by key id;
+create dataset teacher.pstdoc(tchrType) partitioned by key id;
+
+for $l in dataset('Metadata.Dataset')
+where $l.DataverseName='student' or $l.DataverseName='teacher'
+return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07.aql
new file mode 100644
index 0000000..4bba053
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07.aql
@@ -0,0 +1,34 @@
+/*
+ * Description     : Use fully qualified name to create dataset, type and index
+ *                 : and to access dataset
+ * Expected Result : Success
+ * Date            : 29th August 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv07.adm";
+
+create type test.Emp as closed {
+id:int32,
+fname:string,
+lname:string,
+age:int32,
+dept:string
+}
+
+create dataset test.employee(Emp) partitioned by key id;
+
+load dataset test.employee
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/names.adm"),("format"="delimited-text"),("delimiter"="|"));
+
+create index idx_employee_f_l_name on test.employee(fname,lname);
+
+write output to nc1:"rttest/cross-dataverse_cross-dv07.adm";
+
+for $l in dataset('test.employee')
+where $l.fname="Julio" and $l.lname="Isa"
+return $l
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08.aql
new file mode 100644
index 0000000..10985e3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08.aql
@@ -0,0 +1,52 @@
+/*
+ * Description  : Create two UDFs in two different dataverses and create datasets in tose dvs
+ *              : access the datasets from the UDF defined in the other dataverse and invoke one of the UDF
+ * Expected Res : Success
+ * Date         : Sep 7th 2012
+ */
+
+// dv1 - udf1 - dataset1
+// dv2 - udf2 - dataset2
+
+drop dataverse test if exists;
+drop dataverse fest if exists;
+
+create dataverse test;
+create dataverse fest;
+
+create type test.testtype as open {
+id : int32
+}
+
+create type fest.testtype as open {
+id : int32
+}
+
+create dataset test.t1(testtype) partitioned by key id;
+create dataset fest.t1(testtype) partitioned by key id;
+
+insert into dataset test.t1({"id":24});
+insert into dataset test.t1({"id":23});
+insert into dataset test.t1({"id":21});
+insert into dataset test.t1({"id":44});
+insert into dataset test.t1({"id":64});
+
+insert into dataset fest.t1({"id":24});
+insert into dataset fest.t1({"id":23});
+insert into dataset fest.t1({"id":21});
+insert into dataset fest.t1({"id":44});
+insert into dataset fest.t1({"id":64});
+
+create function test.f1(){
+for $l in dataset('fest.t1')
+return $l
+}
+
+create function fest.f1(){
+for $m in dataset('test.t1')
+return $m
+}
+
+let $a := test.f1()
+let $b := fest.f1()
+return { "a" : $a, "b" : $b }
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09.aql
new file mode 100644
index 0000000..6eea8ac
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09.aql
@@ -0,0 +1,24 @@
+/*
+ * Description  : Create user defined funs. in two different dataverses
+ *              : and invoke one of them.
+ *              : In this test we use fully qualified names to access and create the UDFs.
+ * Expected Res : Success
+ * Date         : 31st Aug 2012
+ */
+
+drop dataverse testdv1 if exists;
+drop dataverse testdv2 if exists;
+create dataverse testdv1;
+create dataverse testdv2;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv09.adm";
+
+create function testdv1.fun01(){
+"function 01"
+}
+
+create function testdv2.fun02(){
+"function 02"
+}
+
+testdv1.fun01()
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11.aql
new file mode 100644
index 0000000..03b84a7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11.aql
@@ -0,0 +1,23 @@
+/* 
+ * Description  : Create two UDFs in two different dataverses
+ *              : Invoke one UDF from the body of the other UDF.
+ * Expected Res : Success
+ * Date         : 31st Aug 2012
+ */
+
+drop dataverse testdv1 if exists;
+drop dataverse testdv2 if exists;
+create dataverse testdv1;
+create dataverse testdv2;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv11.adm";
+
+create function testdv1.fun01(){
+testdv2.fun02()
+}
+
+create function testdv2.fun02(){
+"function 02"
+}
+
+testdv1.fun01()
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12.aql
new file mode 100644
index 0000000..e3cde9f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12.aql
@@ -0,0 +1,25 @@
+/* 
+ * Description  : Create two UDFs in two different dataverses
+ *              : Bind the results returned by each UDF to a variable and return those variables
+ * Expected Res : Success
+ * Date         : 31st Aug 2012
+ */
+
+drop dataverse testdv1 if exists;
+drop dataverse testdv2 if exists;
+create dataverse testdv1;
+create dataverse testdv2;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv12.adm";
+
+create function testdv1.fun01(){
+"function 01"
+}
+
+create function testdv2.fun02(){
+"function 02"
+}
+
+let $a := testdv1.fun01()
+let $b := testdv2.fun02()
+return {"fun-01":$a,"fun-02":$b}
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13.aql
new file mode 100644
index 0000000..13e31b9
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13.aql
@@ -0,0 +1,28 @@
+/* 
+ * Description  : Create UDFs in different dataverses
+ *              : Test for recursion in those UDFs
+ * Expected Res : Failure - Recursion is not allowed!
+ * Date         : 31st Aug 2012
+ * Ignored      : This test is currently not part of the test build, because it being a negative test case expectedly throws an exception. 
+ */
+
+drop dataverse testdv1 if exists;
+drop dataverse testdv2 if exists;
+create dataverse testdv1;
+create dataverse testdv2;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv13.adm";
+
+create function testdv1.fun01(){
+testdv2.fun02()
+}
+
+create function testdv2.fun02(){
+testdv2.fun03()
+}
+
+create function testdv2.fun03(){
+testdv1.fun01()
+}
+
+testdv1.fun01();
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14.aql
new file mode 100644
index 0000000..1c6b863
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Create UDF and invoke UDF in return clause of FLWOR expression
+ * Expected Res : Success
+ * Date         : 31st Aug 2012
+ */
+
+drop dataverse testdv1 if exists;
+create dataverse testdv1;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv14.adm";
+
+create function testdv1.fun01(){
+100
+}
+
+let $a := true
+return testdv1.fun01();
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15.aql
new file mode 100644
index 0000000..2aee200
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15.aql
@@ -0,0 +1,30 @@
+/*
+ * Description  : Create user defined functions using fully qualified names
+ *              : verify their details in Function dataset in Metadata dataverse.
+ * Expected Res :
+ * Date         : 30th Aug 2012
+ */
+
+drop dataverse testdv1 if exists;
+create dataverse testdv1;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv15.adm";
+
+// UDF with no inputs
+create function testdv1.fun01(){
+100
+}
+
+// UDF with one input
+create function testdv1.fun02($a){
+"function 02"
+}
+
+// UDF with two inputs
+create function testdv1.fun03($b,$c){
+$b+$c
+}
+
+for $l in dataset('Metadata.Function')
+where $l.DataverseName='testdv1'
+return $l;
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16.aql
new file mode 100644
index 0000000..b0ac16d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16.aql
@@ -0,0 +1,32 @@
+/*
+ * Description  : Detect Recursion in UDFs
+ * Expected Res : Failure
+ * Date         : 30 Aug 2012
+ * Ignored      : Not part of test build, as its a negative test case that thrwos an exception
+ */
+
+drop dataverse testdv1 if exists;
+create dataverse testdv1;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv16.adm";
+
+// UDF with no inputs
+create function testdv1.fun01(){
+testdv1.fun02()
+}
+
+// UDF with one input
+create function testdv1.fun02(){
+testdv1.fun03()
+}
+
+// UDF with two inputs
+create function testdv1.fun03(){
+testdv1.fun04()
+}
+
+create function testdv1.fun04(){
+testdv1.fun02()
+}
+
+testdv1.fun01()
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17.aql
new file mode 100644
index 0000000..26556e0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17.aql
@@ -0,0 +1,48 @@
+/*
+ * Decription   : Create UDF to query two different datasets that are in tow different dataverses.
+ * Expected Res : Success
+ * Date         : Sep 7 2012
+ */
+
+// this test currently gives ParseException
+
+drop dataverse test if exists;
+drop dataverse fest if exists;
+
+create dataverse test;
+create dataverse fest;
+
+create type test.testtype as open {
+id : int32
+}
+
+create type fest.testtype as open {
+id : int32
+}
+
+create dataset test.t1(testtype) partitioned by key id;
+create dataset fest.t1(testtype) partitioned by key id;
+
+insert into dataset test.t1({"id":24});
+insert into dataset test.t1({"id":23});
+insert into dataset test.t1({"id":21});
+insert into dataset test.t1({"id":44});
+insert into dataset test.t1({"id":64});
+
+insert into dataset fest.t1({"id":24});
+insert into dataset fest.t1({"id":23});
+insert into dataset fest.t1({"id":21});
+insert into dataset fest.t1({"id":44});
+insert into dataset fest.t1({"id":64});
+
+create function fest.f1(){
+for $m in dataset('test.t1')
+for $l in dataset('fest.t1')
+order by $m,$l
+return { "l":$l,"m":$m }
+}
+
+write output to nc1:"rttest/cross-dataverse_cross-dv17.adm";
+
+fest.f1();
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18.aql
new file mode 100644
index 0000000..0d3bd53
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18.aql
@@ -0,0 +1,41 @@
+/*
+ * Description  : Create two dataverses and one dataset in each of the dataverse
+ *              : insert data and query using the datasets using fully qualified names and return results.
+ * Expected Res : Success
+ * Date         : Sep 7th 2012
+ * Ignored      : Not part of the current test build because of Issue 199
+ */
+
+
+drop dataverse test if exists;
+drop dataverse fest if exists;
+
+create dataverse test;
+create dataverse fest;
+
+create type test.testtype as open {
+id : int32
+}
+
+create type fest.testtype as open {
+id : int32
+}
+
+create dataset test.t1(testtype) partitioned by key id;
+create dataset fest.t1(testtype) partitioned by key id;
+
+insert into dataset test.t1({"id":24});
+insert into dataset test.t1({"id":23});
+insert into dataset test.t1({"id":21});
+insert into dataset test.t1({"id":44});
+insert into dataset test.t1({"id":64});
+
+insert into dataset fest.t1({"id":24});
+insert into dataset fest.t1({"id":23});
+insert into dataset fest.t1({"id":21});
+insert into dataset fest.t1({"id":44});
+insert into dataset fest.t1({"id":64});
+
+let $a := (for $l in dataset('fest.t1') return $l)
+let $b := (for $m in dataset('test.t1') return $m)
+return {"a":$a,"b":$b}
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19.aql
new file mode 100644
index 0000000..335f11c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19.aql
@@ -0,0 +1,57 @@
+/*
+ * Description  : Create internal and external datasets in more than one dataverse and query metadata to verify entries in Metadata.
+ * Expected Res : Success
+ * Date         : Sep 20 2012
+ */
+
+drop dataverse test1 if exists;
+drop dataverse test2 if exists;
+create dataverse test1;
+create dataverse test2;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv19.adm";
+
+create type test1.testtype as open {
+id : int32,
+name : string,
+loc: point,
+time: datetime
+}
+
+create type test2.testtype as open {
+id : int32,
+name : string?,
+loc: point,
+time: datetime
+}
+
+create type test1.Tweet as open {
+  id: int32,
+  tweetid: int64,
+  loc: point,
+  time: datetime,
+  text: string
+}
+
+create dataset test1.t1(testtype) partitioned by key id;
+
+create dataset test2.t2(testtype) partitioned by key id;
+
+create dataset test2.t3(testtype) partitioned by key id;
+
+create dataset test1.t2(testtype) partitioned by key id;
+
+create dataset test1.t3(testtype) partitioned by key id;
+
+create dataset test2.t4(testtype) partitioned by key id;
+
+create external dataset test1.TwitterData(Tweet)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/twitter/extrasmalltweets.txt"),("format"="adm"));
+
+for $l in dataset('Metadata.Dataset')
+where $l.DataverseName='test1' or $l.DataverseName='test2' or $l.DataverseName='TwitterData'
+return $l
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset.aql
new file mode 100644
index 0000000..7b14957
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset.aql
@@ -0,0 +1,31 @@
+drop dataverse test if exists;
+create dataverse test;
+
+create type test.AddressType as open {
+  number: int32,
+  street: string,
+  city: string
+};
+
+create type test.CustomerType as closed {
+  cid: int32,
+  name: string,
+  cashBack: int32,
+  age: int32?,
+  address: AddressType?,
+  lastorder: {
+    oid: int32,
+    total: float
+  }
+};
+
+create dataset test.Customers(CustomerType)
+partitioned by key cid;
+
+drop dataset test.Customers;
+
+write output to nc1:"rttest/cross-dataverse_drop_dataset.adm";
+
+for $x in dataset('Metadata.Dataset')
+where $x.DataverseName='test' and $x.DatasetName='Customers'
+return $x
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses.aql
new file mode 100644
index 0000000..7eebbaf
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses.aql
@@ -0,0 +1,65 @@
+//***** Test to read from a dataset and insert into another dataset when the datasets belong to different dataverses*****//
+drop dataverse test1 if exists;
+drop dataverse test2 if exists;
+
+create dataverse test1;
+create dataverse test2;
+
+create type test1.AddressType as open {
+  number: int32,
+  street: string,
+  city: string
+};
+
+create type test1.CustomerType as closed {
+  cid: int32,
+  name: string,
+  cashBack: int32,
+  age: int32?,
+  address: AddressType?,
+  lastorder: {
+    oid: int32,
+    total: float
+  }
+};
+
+create type test2.AddressType as open {
+  number: int32,
+  street: string,
+  city: string
+};
+
+create type test2.CustomerType as closed {
+  cid: int32,
+  name: string,
+  cashBack: int32,
+  age: int32?,
+  address: AddressType?,
+  lastorder: {
+    oid: int32,
+    total: float
+  }
+};
+
+create dataset test1.Customers(CustomerType)
+partitioned by key cid;
+
+create dataset test2.Customers(CustomerType)
+partitioned by key cid;
+
+load dataset test1.Customers
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),("format"="adm"));
+
+
+insert into dataset test2.Customers(
+for $x in dataset('test1.Customers')
+return $x
+);
+
+write output to nc1:"rttest/cross-dataverse_insert_across_dataverses.adm";
+
+for $c in dataset('test2.Customers')
+order by $c.cid
+return $c
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset.aql
new file mode 100644
index 0000000..89180ef
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset.aql
@@ -0,0 +1,41 @@
+/*
+ * Description  : Use fully qualified dataset names to insert into target dataset by doing a select on source dataset.
+ * Expected Res : Success
+ * Date         : Sep 19 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+create type test.testtype as open {
+id : int32,
+name : string
+}
+
+write output to nc1:"rttest/cross-dataverse_insert_from_source_dataset.adm";
+
+create dataset test.t1(testtype) partitioned by key id;
+
+insert into dataset test.t1({"id":456,"name":"Roger"});
+insert into dataset test.t1({"id":351,"name":"Bob"});
+insert into dataset test.t1({"id":257,"name":"Sammy"});
+insert into dataset test.t1({"id":926,"name":"Richard"});
+insert into dataset test.t1({"id":482,"name":"Kevin"});
+
+create dataset test.t2(testtype) partitioned by key id;
+
+insert into dataset test.t2({"id":438,"name":"Ravi"});
+insert into dataset test.t2({"id":321,"name":"Bobby"});
+insert into dataset test.t2({"id":219,"name":"Sam"});
+insert into dataset test.t2({"id":851,"name":"Ricardo"});
+insert into dataset test.t2({"id":201,"name":"Kelvin"});
+
+insert into dataset test.t1(for $l in dataset('test.t2') return $l);
+
+for $l in dataset('test.t1')
+order by $l.id
+return $l;
+
+drop dataset test.t1 if exists;
+
+drop dataverse test if exists;
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses.aql
new file mode 100644
index 0000000..d09755a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses.aql
@@ -0,0 +1,60 @@
+//***** Test to conduct a join between datasets belonging to different dataverses*****//
+
+drop dataverse test1 if exists;
+drop dataverse test2 if exists;
+
+create dataverse test1;
+create dataverse test2;
+
+create type test1.AddressType as open {
+  number: int32,
+  street: string,
+  city: string
+};
+
+create type test1.CustomerType as closed {
+  cid: int32,
+  name: string,
+  cashBack: int32,
+  age: int32?,
+  address: AddressType?,
+  lastorder: {
+    oid: int32,
+    total: float
+  }
+};
+
+create dataset test1.Customers(CustomerType)
+partitioned by key cid;
+
+
+create type test2.OrderType as open {
+  oid: int32,
+  cid: int32,
+  orderstatus: string,
+  orderpriority: string,
+  clerk: string,
+  total: float,
+  items: [int32]
+}
+
+create dataset test2.Orders(OrderType)
+partitioned by key oid;
+
+
+load dataset test1.Customers
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/customerData.json"),
+("format"="adm"));
+
+load dataset test2.Orders
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/orderData.json"),("format"="adm"));
+
+write output to nc1:"rttest/cross-dataverse_join_across_dataverses.adm";
+
+for $c in dataset('test1.Customers')
+for $o in dataset('test2.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/cross-dataverse/metadata_dataset.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset.aql
new file mode 100644
index 0000000..777613c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset.aql
@@ -0,0 +1,8 @@
+write output to nc1:"rttest/cross-dataverse_metadata_dataset.adm";
+
+for $c in dataset('Metadata.Dataset')
+where $c.DataverseName='Metadata'
+return $c
+
+
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf01.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf01.aql
new file mode 100644
index 0000000..b4c3e11
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf01.aql
@@ -0,0 +1,18 @@
+/*
+ * Description  : Pass an ordered list as input to UDF
+ *              : and return that ordered list.
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf01.adm";
+
+create function test.echo($list){
+$list
+}
+
+for $a in [1,2,3,4,5,6,7,8,9,10]
+return test.echo($a)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf02.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf02.aql
new file mode 100644
index 0000000..7e816c5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf02.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Pass an ordered list as input to UDF and return the zeroth element of that list.
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf02.adm";
+
+create function test.getFirst($list){
+$list[0]
+}
+
+for $a in [[1,2],[3,4]]
+return test.getFirst($a)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf03.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf03.aql
new file mode 100644
index 0000000..c479b1b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf03.aql
@@ -0,0 +1,20 @@
+/*
+ * Description  : Pass an ordered list as input to UDF and return the zeroth element of that list.
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ * Ignored      : Not part of test build due to Issue 200
+ */
+
+// This test is returning NPE...
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf03.adm";
+
+create function test.echo($list){
+$list
+}
+
+for $a in [[1,2],["A","B"],["UCLA","UCSD","UCR","UCI"]]
+return test.echo($a)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf04.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf04.aql
new file mode 100644
index 0000000..088b97e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf04.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Pass as input an ordered list of Records as input to UDF and return the list.
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf04.adm";
+
+create function test.echo($list){
+$list
+}
+
+for $a in [{"name":"John","age":45,"id":123},{"name":"Jim","age":55,"id":103},{"name":"Bill","age":35,"id":125}]
+return test.echo($a)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf05.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf05.aql
new file mode 100644
index 0000000..1e393f3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf05.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Create UDF and bind its return value to a variable and return that variable
+ * Expected Res : Success
+ * Date         : Sep 4th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf05.adm";
+
+create function test.echo($a){
+$a
+}
+
+let $b:=1234
+return test.echo($b)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf06.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf06.aql
new file mode 100644
index 0000000..9e736bd
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf06.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Pass input of type double to UDF
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf06.adm";
+
+create function test.echo($a){
+$a
+}
+
+let $b:=1234.1
+return test.echo($b)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf07.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf07.aql
new file mode 100644
index 0000000..1e74e96
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf07.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Pass value of type float to UDF
+ * Expected Res : Success
+ * Date         : Sep 4th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf07.adm";
+
+create function test.echo($a){
+$a
+}
+
+let $b:=1234.1f
+return test.echo($b)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf08.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf08.aql
new file mode 100644
index 0000000..42e6f22
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf08.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Pass a sting as input to UDF
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf08.adm";
+
+create function test.echo($a){
+$a
+}
+
+let $a:="This is a test string"
+return test.echo($a)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf09.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf09.aql
new file mode 100644
index 0000000..33e8e52
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf09.aql
@@ -0,0 +1,31 @@
+/*
+ * Description  : Create UDF to read from internal dataset 
+ * Expected Res : Success
+ * Date         : Sep 4th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf09.adm";
+
+create type test.TestType as open {
+id : int32
+}
+
+create dataset test.t1(TestType) partitioned by key id;
+
+insert into dataset test.t1({"id":345});
+insert into dataset test.t1({"id":315});
+insert into dataset test.t1({"id":245});
+insert into dataset test.t1({"id":385});
+insert into dataset test.t1({"id":241});
+insert into dataset test.t1({"id":745});
+insert into dataset test.t1({"id":349});
+insert into dataset test.t1({"id":845});
+
+create function test.readDataset($a) {
+$a
+}
+   
+test.readDataset(for $a in dataset('test.t1') order by $a.id return $a);
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf10.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf10.aql
new file mode 100644
index 0000000..739bc05
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf10.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Create UDF and pass an unordered list as input and return that list.
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf10.adm";
+
+create function test.echo($uolist){
+$uolist
+}
+
+let $a:={{"this is optional data","this is extra data","open types are good"}}
+return test.echo($a)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf11.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf11.aql
new file mode 100644
index 0000000..1395cfa
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf11.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Create UDF to return ordered list of integers
+ * Expected Res : Success
+ * Date         : Sep 4th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf11.adm";
+
+create function test.OList(){
+[1,2,3,4,5,6,7,8,9,10]
+}
+
+for $a in test.OList()
+return $a
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf12.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf12.aql
new file mode 100644
index 0000000..ad710eb
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf12.aql
@@ -0,0 +1,16 @@
+/*
+ * Description  : Create UDF to add two integers
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf12.adm";
+
+create function test.foo($a,$b) {
+$a+$b
+}
+
+test.foo(100,200)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf13.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf13.aql
new file mode 100644
index 0000000..c48acf7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf13.aql
@@ -0,0 +1,16 @@
+/*
+ * Description  : Create UDF to subtract two integers
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf13.adm";
+
+create function test.foo($a,$b) {
+$a - $b
+}
+
+test.foo(400,200)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf14.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf14.aql
new file mode 100644
index 0000000..66d362f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf14.aql
@@ -0,0 +1,16 @@
+/*
+ * Description  : Create UDF to multiply two integers
+ * Expected Res : Success
+ * Date         : 4th September 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf14.adm";
+
+create function test.foo($a,$b) {
+$a*$b
+}
+
+test.foo(400,200)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf15.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf15.aql
new file mode 100644
index 0000000..55cc519
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf15.aql
@@ -0,0 +1,21 @@
+/*
+ * Description  : Create UDF that returns a heterogeneous ordered list
+ *              : invoke the UDF in the FOR expression of FLWOR
+ * Expected Res : Success
+ * Date         : Sep 5th 2012
+ * Ignored      : Not part of current tests because of Issue 200
+ */
+
+// this test resturns NPE
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf15.adm";
+
+create function test.OList2(){
+[[1,2,3,4,5,6,7,8,9,10],["a","b","c","d","e","f","g","h","y"]]
+}
+
+for $a in test.OList2()
+return $a
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf16.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf16.aql
new file mode 100644
index 0000000..5b7d4ef
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf16.aql
@@ -0,0 +1,18 @@
+/*
+ * Description  : Create UDF that returns string
+ *              : compute the string lenght of the string
+ * Expected Res : Success
+ * Date         : Sep 5th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf16.adm";
+
+create function test.fn02(){
+"Welcome to the world of Asterix"
+}
+
+let $str := test.fn02()
+return string-length($str)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf17.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf17.aql
new file mode 100644
index 0000000..89fb567
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf17.aql
@@ -0,0 +1,22 @@
+/*
+ * Description  : Create UDF and invoke it from another UDF and 
+ *              : child UDF returns a string to the parent.
+ * Expected Res : Success
+ * Date         : Sep 5th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf17.adm";
+
+create function test.parent(){
+test.child()
+}
+
+create function test.child() {
+"This data is from the child function"
+}
+
+let $str := test.parent()
+return $str
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf18.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf18.aql
new file mode 100644
index 0000000..14791b7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf18.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : Create UDF and invoke the UDF from with in asterix built-in function
+ * Expected Res : Success
+ * Date         : Sep 5th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf18.adm";
+
+create function test.fn06(){
+false
+}
+
+let $val := not(test.fn06())
+return $val
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf19.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf19.aql
new file mode 100644
index 0000000..bf024c7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf19.aql
@@ -0,0 +1,23 @@
+/*
+ * Description  : Create UDF and invoke in the WHERE clause of FLWOR expression
+ * Expected Res : Success
+ * Date         : Sep 5th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf19.adm";
+
+create function test.pie(){
+3.14
+}
+
+create function test.area($radius){
+test.pie() * $radius * $radius
+}
+
+for $a in [2,4,6,8,10,12]
+where test.area($a) > 100
+return test.area($a)
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf20.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf20.aql
new file mode 100644
index 0000000..dfc9610
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf20.aql
@@ -0,0 +1,23 @@
+/*
+ * Description  : Create UDF and invoke in the WHERE clause of FLWOR expression
+ * Expected Res : Success
+ * Date         : Sep 5th 2012
+ */
+
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf20.adm";
+
+create function test.pie(){
+3.14
+}
+
+create function test.area($radius){
+test.pie() * $radius * $radius
+}
+
+for $a in [2,4,6,8,10,12]
+where test.area($a) > 100
+return { "radius" : $a,"area" : test.area($a) }
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf21.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf21.aql
new file mode 100644
index 0000000..4212b04
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf21.aql
@@ -0,0 +1,18 @@
+/*
+ * Description  : Create UDF to verify if input is odd
+ * Expected Res : Success
+ * Date         : Sep 5th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf21.adm";
+
+create function test.isOdd($b){
+$b%2 != 0
+}
+
+for $a in [10,20,2,30,4,3,6,44,5,7,9,1,13,17,992,19,40,50,60,25,45,65,75]
+where test.isOdd($a)
+return $a
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf22.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf22.aql
new file mode 100644
index 0000000..a34e129
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf22.aql
@@ -0,0 +1,18 @@
+/*
+ * Description  : Create UDF to concatenate two input strings.
+ * Expected Res : Success
+ * Date         : Sep 5th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf22.adm";
+
+create function test.getFullName($fname,$lname){
+string-concat([$fname,$lname])
+}
+
+let $fn := "Bob"
+let $ln := "Harbus"
+return test.getFullName($fn,$ln)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf23.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf23.aql
new file mode 100644
index 0000000..1c5ca12
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf23.aql
@@ -0,0 +1,18 @@
+/*
+ * Description  : Create UDF and invoke it in limit clause
+ * Expected Res : Success
+ * Date         : Sep 5th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf23.adm";
+
+create function test.numRows(){
+6
+}
+   
+for $l in dataset('Metadata.Dataset')
+limit test.numRows()
+return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf24.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf24.aql
new file mode 100644
index 0000000..9de03b7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf24.aql
@@ -0,0 +1,21 @@
+/*
+ * Description  : Create UDF that returns a range
+ * Expected Res : Success
+ * Date         : Sep 5 2012
+ * Ignored      : Not part of current test build because of Issue 201
+ */
+
+// Returns java.lang.ClassCastException
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf24.adm";
+
+create function test.myRangeFn($n)
+{
+   range(1,$n)
+}
+
+for $i in test.myRangeFn(100)
+return $i
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf25.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf25.aql
new file mode 100644
index 0000000..5b70889
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf25.aql
@@ -0,0 +1,23 @@
+/*
+ * Description  : Create UDF and invoke with negative inputs.
+ * Expected Res : Failure
+ * Date         : 5th Sep 2012
+ */
+
+// This one returns NPE...
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf25.adm";
+
+create function test.computeBonus($pbcRating,$salary)
+{
+   if ($pbcRating = 1) then
+        $salary * 0.25
+   else
+        $salary * 0.10
+}
+
+test.computeBonus(-1,-1)
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf26.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf26.aql
new file mode 100644
index 0000000..9f460bc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf26.aql
@@ -0,0 +1,16 @@
+/*
+ * Description  : Create UDF and define with missing references.
+ * Expected Res : Failure
+ * Date         : Sep 6th 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf26.adm";
+
+create function test.needs_f1($x){
+ $x + f1()
+}
+
+test.needs_f1(12345)
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf27.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf27.aql
new file mode 100644
index 0000000..c50b3dc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/udf27.aql
@@ -0,0 +1,20 @@
+/*
+ * Description  : Create UDF and invoke UDF from a quantified expression
+ * Expected Res : Success
+ * Date         : Sep 6th 2012
+ */
+
+// this test is not giving expected results.
+// issue 194 reported to track this
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/cross-dataverse_udf27.adm";
+
+create function test.f1(){
+100
+}
+
+let $a := true
+return some $i in [100,200] satisfies test.f1()