diff --git a/com.oracle.truffle.r.engine/hive.config b/com.oracle.truffle.r.engine/hive.config
new file mode 100644
index 0000000000000000000000000000000000000000..07e9cbd1e1a39b1425401427ec4539ca6a5bea66
--- /dev/null
+++ b/com.oracle.truffle.r.engine/hive.config
@@ -0,0 +1,5 @@
+host = localhost
+sid = default
+port = 10000
+user = julien
+passwd = Pa$$w0rd
diff --git a/com.oracle.truffle.r.test/hive.config b/com.oracle.truffle.r.test/hive.config
new file mode 100644
index 0000000000000000000000000000000000000000..07e9cbd1e1a39b1425401427ec4539ca6a5bea66
--- /dev/null
+++ b/com.oracle.truffle.r.test/hive.config
@@ -0,0 +1,5 @@
+host = localhost
+sid = default
+port = 10000
+user = julien
+passwd = Pa$$w0rd
diff --git a/com.oracle.truffle.r.test/tests/HBASE-HBASE.R b/com.oracle.truffle.r.test/tests/HBASE-HBASE.R
new file mode 100644
index 0000000000000000000000000000000000000000..11964ee70e402bec5b8109a72c39c1cfe897786e
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HBASE-HBASE.R
@@ -0,0 +1,25 @@
+# Returns the exchange rate between rfrom and rto
+getRate = function(rfrom, rto)
+{
+  change = new.tableRef("change", "HBase", "hbase-site.xml", "default")
+  rate = query.force(query.where(function (r) r$cfrom == rfrom && r$cto == rto,
+                     query.from(change)))
+  if (rfrom == rto) 1.0 else rate$change
+}
+
+# Returns the names of employees earning at least minSalary in the curr
+# currency
+atLeast = function(minSalary, curr)
+{
+  emp = new.tableRef("emp", "HBase", "hbase-site.xml", "default")
+  query.select(function (e) { r = new.env()
+                        r$name = e$ename
+                        r },
+  query.where(function (e) e$sal >= minSalary * getRate("USD", curr),
+  query.from(emp)))
+}
+
+richUSPeople = atLeast(2000.0, "USD")
+richEURPeople = atLeast(2000.0, "EUR")
+print(query.force(richUSPeople))
+print(query.force(richEURPeople))
diff --git a/com.oracle.truffle.r.test/tests/HBASE-HBASE.out b/com.oracle.truffle.r.test/tests/HBASE-HBASE.out
new file mode 100644
index 0000000000000000000000000000000000000000..ea36bce72b4e855ab8b1f373dbbfb0d7ebe4a795
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HBASE-HBASE.out
@@ -0,0 +1,18 @@
+    name
+1  SMITH
+2  ADAMS
+3 MILLER
+4  ALLEN
+5   WARD
+6  JONES
+7  SCOTT
+    name
+1  SMITH
+2  ADAMS
+3   FORD
+4 MILLER
+5  ALLEN
+6   WARD
+7  JONES
+8  SCOTT
+
diff --git a/com.oracle.truffle.r.test/tests/HBASE-HIVE.R b/com.oracle.truffle.r.test/tests/HBASE-HIVE.R
new file mode 100644
index 0000000000000000000000000000000000000000..dc42626335c84ee1ea9491f7f7214e6fbcb40a51
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HBASE-HIVE.R
@@ -0,0 +1,25 @@
+# Returns the exchange rate between rfrom and rto
+getRate = function(rfrom, rto)
+{
+  change = new.tableRef("change", "Hive", "hive.config", "main")
+  rate = query.force(query.where(function (r) r$cfrom == rfrom && r$cto == rto,
+                     query.from(change)))
+  if (rfrom == rto) 1.0 else rate$change
+}
+
+# Returns the names of employees earning at least minSalary in the curr
+# currency
+atLeast = function(minSalary, curr)
+{
+  emp = new.tableRef("emp", "HBase", "hbase-site.xml", "default")
+  query.select(function (e) { r = new.env()
+                        r$name = e$ename
+                        r },
+  query.where(function (e) e$sal >= minSalary * getRate("USD", curr),
+  query.from(emp)))
+}
+
+richUSPeople = atLeast(2000.0, "USD")
+richEURPeople = atLeast(2000.0, "EUR")
+print(query.force(richUSPeople))
+print(query.force(richEURPeople))
diff --git a/com.oracle.truffle.r.test/tests/HBASE-HIVE.out b/com.oracle.truffle.r.test/tests/HBASE-HIVE.out
new file mode 100644
index 0000000000000000000000000000000000000000..ea36bce72b4e855ab8b1f373dbbfb0d7ebe4a795
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HBASE-HIVE.out
@@ -0,0 +1,18 @@
+    name
+1  SMITH
+2  ADAMS
+3 MILLER
+4  ALLEN
+5   WARD
+6  JONES
+7  SCOTT
+    name
+1  SMITH
+2  ADAMS
+3   FORD
+4 MILLER
+5  ALLEN
+6   WARD
+7  JONES
+8  SCOTT
+
diff --git a/com.oracle.truffle.r.test/tests/HBASE-PGSQL.R b/com.oracle.truffle.r.test/tests/HBASE-PGSQL.R
new file mode 100644
index 0000000000000000000000000000000000000000..629712b79cf2b60f1e828d3fb12cdbea76dd069e
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HBASE-PGSQL.R
@@ -0,0 +1,25 @@
+# Returns the exchange rate between rfrom and rto
+getRate = function(rfrom, rto)
+{
+  change = new.tableRef("change", "PostgreSQL", "postgre.config", "public")
+  rate = query.force(query.where(function (r) r$cfrom == rfrom && r$cto == rto,
+                     query.from(change)))
+  if (rfrom == rto) 1.0 else rate$change
+}
+
+# Returns the names of employees earning at least minSalary in the curr
+# currency
+atLeast = function(minSalary, curr)
+{
+  emp = new.tableRef("emp", "HBase", "hbase-site.xml", "default")
+  query.select(function (e) { r = new.env()
+                        r$name = e$ename
+                        r },
+  query.where(function (e) e$sal >= minSalary * getRate("USD", curr),
+  query.from(emp)))
+}
+
+richUSPeople = atLeast(2000.0, "USD")
+richEURPeople = atLeast(2000.0, "EUR")
+print(query.force(richUSPeople))
+print(query.force(richEURPeople))
diff --git a/com.oracle.truffle.r.test/tests/HBASE-PGSQL.out b/com.oracle.truffle.r.test/tests/HBASE-PGSQL.out
new file mode 100644
index 0000000000000000000000000000000000000000..ea36bce72b4e855ab8b1f373dbbfb0d7ebe4a795
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HBASE-PGSQL.out
@@ -0,0 +1,18 @@
+    name
+1  SMITH
+2  ADAMS
+3 MILLER
+4  ALLEN
+5   WARD
+6  JONES
+7  SCOTT
+    name
+1  SMITH
+2  ADAMS
+3   FORD
+4 MILLER
+5  ALLEN
+6   WARD
+7  JONES
+8  SCOTT
+
diff --git a/com.oracle.truffle.r.test/tests/HIVE-HBASE.R b/com.oracle.truffle.r.test/tests/HIVE-HBASE.R
new file mode 100644
index 0000000000000000000000000000000000000000..9c96c493957fa1dbec9e08a271b77426d2999e70
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HIVE-HBASE.R
@@ -0,0 +1,25 @@
+# Returns the exchange rate between rfrom and rto
+getRate = function(rfrom, rto)
+{
+  change = new.tableRef("change", "HBase", "hbase-site.xml", "default")
+  rate = query.force(query.where(function (r) r$cfrom == rfrom && r$cto == rto,
+                     query.from(change)))
+  if (rfrom == rto) 1.0 else rate$change
+}
+
+# Returns the names of employees earning at least minSalary in the curr
+# currency
+atLeast = function(minSalary, curr)
+{
+  emp = new.tableRef("emp", "Hive", "hive.config", "main")
+  query.select(function (e) { r = new.env()
+                        r$name = e$ename
+                        r },
+  query.where(function (e) e$sal >= minSalary * getRate("USD", curr),
+  query.from(emp)))
+}
+
+richUSPeople = atLeast(2000.0, "USD")
+richEURPeople = atLeast(2000.0, "EUR")
+print(query.force(richUSPeople))
+print(query.force(richEURPeople))
diff --git a/com.oracle.truffle.r.test/tests/HIVE-HBASE.out b/com.oracle.truffle.r.test/tests/HIVE-HBASE.out
new file mode 100644
index 0000000000000000000000000000000000000000..53da7150c82f6978dfcb1dec73b98d72aa03d3cf
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HIVE-HBASE.out
@@ -0,0 +1,18 @@
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7 MILLER
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7   FORD
+8 MILLER
+
diff --git a/com.oracle.truffle.r.test/tests/HIVE-HIVE.R b/com.oracle.truffle.r.test/tests/HIVE-HIVE.R
new file mode 100644
index 0000000000000000000000000000000000000000..fc709f98e555b1ae35d7838c12141aab4b88389e
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HIVE-HIVE.R
@@ -0,0 +1,25 @@
+# Returns the exchange rate between rfrom and rto
+getRate = function(rfrom, rto)
+{
+  change = new.tableRef("change", "Hive", "hive.config", "main")
+  rate = query.force(query.where(function (r) r$cfrom == rfrom && r$cto == rto,
+                     query.from(change)))
+  if (rfrom == rto) 1.0 else rate$change
+}
+
+# Returns the names of employees earning at least minSalary in the curr
+# currency
+atLeast = function(minSalary, curr)
+{
+  emp = new.tableRef("emp", "Hive", "hive.config", "main")
+  query.select(function (e) { r = new.env()
+                        r$name = e$ename
+                        r },
+  query.where(function (e) e$sal >= minSalary * getRate("USD", curr),
+  query.from(emp)))
+}
+
+richUSPeople = atLeast(2000.0, "USD")
+richEURPeople = atLeast(2000.0, "EUR")
+print(query.force(richUSPeople))
+print(query.force(richEURPeople))
diff --git a/com.oracle.truffle.r.test/tests/HIVE-HIVE.out b/com.oracle.truffle.r.test/tests/HIVE-HIVE.out
new file mode 100644
index 0000000000000000000000000000000000000000..ea36bce72b4e855ab8b1f373dbbfb0d7ebe4a795
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HIVE-HIVE.out
@@ -0,0 +1,18 @@
+    name
+1  SMITH
+2  ADAMS
+3 MILLER
+4  ALLEN
+5   WARD
+6  JONES
+7  SCOTT
+    name
+1  SMITH
+2  ADAMS
+3   FORD
+4 MILLER
+5  ALLEN
+6   WARD
+7  JONES
+8  SCOTT
+
diff --git a/com.oracle.truffle.r.test/tests/HIVE-PGSQL.R b/com.oracle.truffle.r.test/tests/HIVE-PGSQL.R
new file mode 100644
index 0000000000000000000000000000000000000000..6d4489915dd966d18cbb5401fc1b8d34319ae6e1
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HIVE-PGSQL.R
@@ -0,0 +1,25 @@
+# Returns the exchange rate between rfrom and rto
+getRate = function(rfrom, rto)
+{
+  change = new.tableRef("change", "PostgreSQL", "postgre.config", "public")
+  rate = query.force(query.where(function (r) r$cfrom == rfrom && r$cto == rto,
+                     query.from(change)))
+  if (rfrom == rto) 1.0 else rate$change
+}
+
+# Returns the names of employees earning at least minSalary in the curr
+# currency
+atLeast = function(minSalary, curr)
+{
+  emp = new.tableRef("emp", "Hive", "hive.config", "main")
+  query.select(function (e) { r = new.env()
+                        r$name = e$ename
+                        r },
+  query.where(function (e) e$sal >= minSalary * getRate("USD", curr),
+  query.from(emp)))
+}
+
+richUSPeople = atLeast(2000.0, "USD")
+richEURPeople = atLeast(2000.0, "EUR")
+print(query.force(richUSPeople))
+print(query.force(richEURPeople))
diff --git a/com.oracle.truffle.r.test/tests/HIVE-PGSQL.out b/com.oracle.truffle.r.test/tests/HIVE-PGSQL.out
new file mode 100644
index 0000000000000000000000000000000000000000..53da7150c82f6978dfcb1dec73b98d72aa03d3cf
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/HIVE-PGSQL.out
@@ -0,0 +1,18 @@
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7 MILLER
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7   FORD
+8 MILLER
+
diff --git a/com.oracle.truffle.r.test/tests/PGSQL-HBASE.R b/com.oracle.truffle.r.test/tests/PGSQL-HBASE.R
new file mode 100644
index 0000000000000000000000000000000000000000..b767f74eeb0c1357effa568d13e4b7ab84b64c48
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/PGSQL-HBASE.R
@@ -0,0 +1,25 @@
+# Returns the exchange rate between rfrom and rto
+getRate = function(rfrom, rto)
+{
+  change = new.tableRef("change", "HBase", "hbase-site.xml", "default")
+  rate = query.force(query.where(function (r) r$cfrom == rfrom && r$cto == rto,
+                     query.from(change)))
+  if (rfrom == rto) 1.0 else rate$change
+}
+
+# Returns the names of employees earning at least minSalary in the curr
+# currency
+atLeast = function(minSalary, curr)
+{
+  emp = new.tableRef("emp", "PostgreSQL", "postgre.config", "public")
+  query.select(function (e) { r = new.env()
+                        r$name = e$ename
+                        r },
+  query.where(function (e) e$sal >= minSalary * getRate("USD", curr),
+  query.from(emp)))
+}
+
+richUSPeople = atLeast(2000.0, "USD")
+richEURPeople = atLeast(2000.0, "EUR")
+print(query.force(richUSPeople))
+print(query.force(richEURPeople))
diff --git a/com.oracle.truffle.r.test/tests/PGSQL-HBASE.out b/com.oracle.truffle.r.test/tests/PGSQL-HBASE.out
new file mode 100644
index 0000000000000000000000000000000000000000..53da7150c82f6978dfcb1dec73b98d72aa03d3cf
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/PGSQL-HBASE.out
@@ -0,0 +1,18 @@
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7 MILLER
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7   FORD
+8 MILLER
+
diff --git a/com.oracle.truffle.r.test/tests/PGSQL-HIVE.R b/com.oracle.truffle.r.test/tests/PGSQL-HIVE.R
new file mode 100644
index 0000000000000000000000000000000000000000..13b2a4f8eda76a0d7fd5ea2e1b880ea63d593da7
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/PGSQL-HIVE.R
@@ -0,0 +1,25 @@
+# Returns the exchange rate between rfrom and rto
+getRate = function(rfrom, rto)
+{
+  change = new.tableRef("change", "Hive", "hive.config", "main")
+  rate = query.force(query.where(function (r) r$cfrom == rfrom && r$cto == rto,
+                     query.from(change)))
+  if (rfrom == rto) 1.0 else rate$change
+}
+
+# Returns the names of employees earning at least minSalary in the curr
+# currency
+atLeast = function(minSalary, curr)
+{
+  emp = new.tableRef("emp", "PostgreSQL", "postgre.config", "public")
+  query.select(function (e) { r = new.env()
+                        r$name = e$ename
+                        r },
+  query.where(function (e) e$sal >= minSalary * getRate("USD", curr),
+  query.from(emp)))
+}
+
+richUSPeople = atLeast(2000.0, "USD")
+richEURPeople = atLeast(2000.0, "EUR")
+print(query.force(richUSPeople))
+print(query.force(richEURPeople))
diff --git a/com.oracle.truffle.r.test/tests/PGSQL-HIVE.out b/com.oracle.truffle.r.test/tests/PGSQL-HIVE.out
new file mode 100644
index 0000000000000000000000000000000000000000..53da7150c82f6978dfcb1dec73b98d72aa03d3cf
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/PGSQL-HIVE.out
@@ -0,0 +1,18 @@
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7 MILLER
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7   FORD
+8 MILLER
+
diff --git a/com.oracle.truffle.r.test/tests/PGSQL-PGSQL.R b/com.oracle.truffle.r.test/tests/PGSQL-PGSQL.R
new file mode 100644
index 0000000000000000000000000000000000000000..4ddc544bb0cdb9936fa4f27fe534b595f953e28a
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/PGSQL-PGSQL.R
@@ -0,0 +1,25 @@
+# Returns the exchange rate between rfrom and rto
+getRate = function(rfrom, rto)
+{
+  change = new.tableRef("change", "PostgreSQL", "postgre.config", "public")
+  rate = query.force(query.where(function (r) r$cfrom == rfrom && r$cto == rto,
+                     query.from(change)))
+  if (rfrom == rto) 1.0 else rate$change
+}
+
+# Returns the names of employees earning at least minSalary in the curr
+# currency
+atLeast = function(minSalary, curr)
+{
+  emp = new.tableRef("emp", "PostgreSQL", "postgre.config", "public")
+  query.select(function (e) { r = new.env()
+                        r$name = e$ename
+                        r },
+  query.where(function (e) e$sal >= minSalary * getRate("USD", curr),
+  query.from(emp)))
+}
+
+richUSPeople = atLeast(2000.0, "USD")
+richEURPeople = atLeast(2000.0, "EUR")
+print(query.force(richUSPeople))
+print(query.force(richEURPeople))
diff --git a/com.oracle.truffle.r.test/tests/PGSQL-PGSQL.out b/com.oracle.truffle.r.test/tests/PGSQL-PGSQL.out
new file mode 100644
index 0000000000000000000000000000000000000000..53da7150c82f6978dfcb1dec73b98d72aa03d3cf
--- /dev/null
+++ b/com.oracle.truffle.r.test/tests/PGSQL-PGSQL.out
@@ -0,0 +1,18 @@
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7 MILLER
+    name
+1  SMITH
+2  ALLEN
+3   WARD
+4  JONES
+5  SCOTT
+6  ADAMS
+7   FORD
+8 MILLER
+