From d241ff5efbd02ef858c6cf221e065b561a31d5b4 Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Mon, 27 Jun 2011 13:07:39 +0000
Subject: [PATCH] LMS-2347 Further work on query interface.

SVN: 21846
---
 .../api/v1/IDataSourceQueryService.java       | 33 +++++++++++++++++++
 .../api/v1/impl/DataSourceQueryService.java   |  6 ++++
 2 files changed, 39 insertions(+)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSourceQueryService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSourceQueryService.java
index e243c3c7204..31e17726094 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSourceQueryService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/IDataSourceQueryService.java
@@ -23,11 +23,44 @@ import net.lemnik.eodsql.DataSet;
 /**
  * A service that supports executing queries on a data source configured in the DSS
  * service.properties.
+ * <p>
+ * Jython usage example:
+ * 
+ * <pre>
+ * results = query_service.select("data-source-name", "SELECT * FROM table_name WHERE id > 1") 
+ * [... do stuff with results]
+ * results.close()
+ * </pre>
+ * <p>
+ * If you need to do this frequently, you may want to extract this into a function
+ * 
+ * <pre>
+ * def execute_query(query_service, block, query, params=None):
+ *     if params is None:
+ *         result = query_service.select("data-source-name", query)
+ *     else:
+ *         result = query_service.select("data-source-name", query, params)
+ *     block(result)
+ *     result.close()
+ * </pre>
  * 
  * @author Chandrasekhar Ramakrishnan
  */
 public interface IDataSourceQueryService
 {
+
+    /**
+     * Execute a query against the data source with the specified name.
+     * 
+     * @param dataSourceName The name of the data source to query against, as declared in the
+     *            service.properties file.
+     * @param query The SQL query to execute, possibly including parameters marked by '?'.
+     * @return A List of Maps with the data. Do not forget to close the result when done!
+     * @throw IllegalArgumentException Throws if there is no data source with the given name.
+     */
+    DataSet<Map<String, Object>> select(String dataSourceName, String query)
+            throws IllegalArgumentException;
+
     /**
      * Execute a query against the data source with the specified name.
      * 
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSourceQueryService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSourceQueryService.java
index bf4897f54ff..83ea3b19a29 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSourceQueryService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSourceQueryService.java
@@ -46,4 +46,10 @@ public class DataSourceQueryService implements IDataSourceQueryService
         return QueryTool.select(dataSource, query, parameters);
     }
 
+    public DataSet<Map<String, Object>> select(String dataSourceName, String query)
+            throws IllegalArgumentException
+    {
+        return select(dataSourceName, query, new Object[0]);
+    }
+
 }
-- 
GitLab