aboutsummaryrefslogtreecommitdiffstats
path: root/trunk/infrastructure/framework-src/modules/sqlbase/sqlbase.js
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/infrastructure/framework-src/modules/sqlbase/sqlbase.js')
-rw-r--r--trunk/infrastructure/framework-src/modules/sqlbase/sqlbase.js205
1 files changed, 205 insertions, 0 deletions
diff --git a/trunk/infrastructure/framework-src/modules/sqlbase/sqlbase.js b/trunk/infrastructure/framework-src/modules/sqlbase/sqlbase.js
new file mode 100644
index 0000000..3df1a0f
--- /dev/null
+++ b/trunk/infrastructure/framework-src/modules/sqlbase/sqlbase.js
@@ -0,0 +1,205 @@
+/**
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import("jsutils.*");
+import("sqlbase.sqlcommon");
+import("fastJSON");
+import("timer");
+
+jimport("java.lang.System.out.println");
+
+function _sqlbase() {
+ return sqlcommon.getSqlBase();
+}
+
+/**
+ * Creates a SQL table suitable for storing a mapping from String to JSON value.
+ * Maximum key length is 128 characters. Has no effect if the table already exists.
+ */
+function createJSONTable(tableName) {
+ _sqlbase().createJSONTable(String(tableName));
+}
+
+/**
+ * Retrieves a JavaScript object or value from a table. Returns undefined
+ * if there is no mapping for the given string key. Requires that the table
+ * exist.
+ */
+function getJSON(tableName, stringKey) {
+ var result = _sqlbase().getJSON(String(tableName), String(stringKey));
+ if (result) {
+
+ return fastJSON.parse(String(result))['x'];
+
+ /* performance-testing JSON
+ var obj1 = timer.time("JSON.parse (json2)", function() {
+ return JSON.parse(String(result))['x'];
+ });
+ var obj2 = timer.time("JSON.parse (fastJSON)", function() {
+ return fastJSON.parse(String(result))['x'];
+ });
+ return obj2;
+ */
+ }
+ return undefined;
+}
+
+function getAllJSON(tableName, start, count) {
+ var result = _sqlbase().getAllJSON(String(tableName), Number(start), Number(count));
+ return Array.prototype.map.call(result, function(x) {
+ return {id: x.id(), value: fastJSON.parse(String(x.value()))['x']};
+ })
+}
+
+function getAllJSONKeys(tableName) {
+ var result = _sqlbase().getAllJSONKeys(String(tableName));
+ return Array.prototype.map.call(result, function(x) { return String(x); });
+}
+
+/**
+ * Assigns a JavaScript object or primitive value to a string key in a table.
+ * Maximum key length is 128 characters. Requires that the table exist.
+ */
+function putJSON(tableName, stringKey, objectOrValue) {
+ var obj = ({x:objectOrValue});
+
+ var json = fastJSON.stringify(obj);
+
+ /* performance-testing JSON
+
+ var json1 = timer.time("JSON.stringify (json2)", function() {
+ return JSON.stringify(obj);
+ });
+ var json2 = timer.time("JSON.stringify (fastJSON)", function() {
+ return fastJSON.stringify(obj);
+ });
+
+ if (json1 != json2) {
+ println("json strings do not match!");
+ println("\n\n");
+ println(json1);
+ println("\n");
+ println(json2);
+ println("\n\n");
+ }*/
+
+ _sqlbase().putJSON(String(tableName), String(stringKey), json);
+}
+
+/**
+ * Removes the mapping for a string key from a table. Requires that the table
+ * exist.
+ */
+function deleteJSON(tableName, stringKey) {
+ _sqlbase().deleteJSON(String(tableName), String(stringKey));
+}
+
+/**
+ * Creates a SQL table suitable for storing a mapping from (key,n) to string.
+ * The mapping may be sparse, but storage is most efficient when n are consecutive.
+ * The "length" of the array is not stored and must be externally maintained.
+ * Maximum key length is 128 characters. This call has no effect if the table
+ * already exists.
+ */
+function createStringArrayTable(tableName) {
+ _sqlbase().createStringArrayTable(String(tableName));
+}
+
+/**
+ * Assigns a string value to a (key,n) pair in a StringArray table. Maximum key length
+ * is 128 characters. Requires that the table exist.
+ */
+function putStringArrayElement(tableName, stringKey, n, value) {
+ _sqlbase().putStringArrayElement(String(tableName), String(stringKey),
+ Number(n), String(value));
+}
+
+/**
+ * Equivalent to a series of consecutive puts of the elements of valueArray, with the first
+ * one going to n=startN, the second to n=startN+1, and so on, but much more efficient.
+ */
+function putConsecutiveStringArrayElements(tableName, stringKey, startN, valueArray) {
+ var putter = _sqlbase().putMultipleStringArrayElements(String(tableName), String(stringKey));
+ for(var i=0;i<valueArray.length;i++) {
+ putter.put(Number(startN)+i, String(valueArray[i]));
+ }
+ putter.finish();
+}
+
+/**
+ * Equivalent to a series of puts of the (key,value) entries of the JavaScript object
+ * nToValue, using as few database operations as possible.
+ */
+function putDictStringArrayElements(tableName, stringKey, nToValue) {
+ var nArray = [];
+ for(var n in nToValue) {
+ nArray.push(n);
+ }
+ nArray.sort(function(a,b) { return Number(a) - Number(b); });
+
+ var putter = _sqlbase().putMultipleStringArrayElements(String(tableName), String(stringKey));
+ nArray.forEach(function(n) {
+ putter.put(Number(n), String(nToValue[n]));
+ });
+ putter.finish();
+}
+
+/**
+ * Retrieves a string value from a StringArray table. Returns undefined
+ * if there is no mapping for the given (key,n) pair. Requires that the table
+ * exist.
+ */
+function getStringArrayElement(tableName, stringKey, n) {
+ var result = _sqlbase().getStringArrayElement(String(tableName),
+ String(stringKey), Number(n));
+ if (result) {
+ return String(result);
+ }
+ return undefined;
+}
+
+/**
+ * Retrieves all values from the database page that contains the mapping for n.
+ * Properties are added to destMap for n, if present in the database, and any other
+ * numeric entries in the same page. No return value.
+ */
+function getPageStringArrayElements(tableName, stringKey, n, destMap) {
+ var array = _sqlbase().getPageStringArrayElements(String(tableName), String(stringKey), n);
+ for(var i=0;i<array.length;i++) {
+ var entry = array[i];
+ destMap[entry.index()] = String(entry.value());
+ }
+}
+
+/**
+ * Removes the mapping for a (key,n) pair from a StringArray table. Requires that the table
+ * exist.
+ */
+function deleteStringArrayElement(tableName, stringKey, n) {
+ _sqlbase().putStringArrayElement(String(tableName), String(stringKey), Number(n), null);
+}
+
+/**
+ * Removes all mappings and metadata associated with a given key in a table.
+ */
+function clearStringArray(tableName, stringKey) {
+ _sqlbase().clearStringArray(String(tableName), stringKey);
+}
+
+function getStringArrayAllKeys(tableName) {
+ var result = _sqlbase().getStringArrayAllKeys(String(tableName));
+ return Array.prototype.map.call(result, function(x) { return String(x); });
+}