You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2015/06/30 13:08:10 UTC
[1/2] incubator-ignite git commit: # ignite-843 Added load schema
from postgres .
Repository: incubator-ignite
Updated Branches:
refs/heads/ignite-843 8e63378bd -> 7850b0dd3
# ignite-843 Added load schema from postgres .
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/40f5a313
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/40f5a313
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/40f5a313
Branch: refs/heads/ignite-843
Commit: 40f5a31323e32cb0f40acdc304aa30587548ee69
Parents: 5359918
Author: Andrey <an...@gridgain.com>
Authored: Tue Jun 30 18:08:24 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Tue Jun 30 18:08:24 2015 +0700
----------------------------------------------------------------------
.../nodejs/public/javascripts/dataStructures.js | 37 +++-
modules/webconfig/nodejs/routes/persistences.js | 204 ++++++++++++++++++-
2 files changed, 233 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/40f5a313/modules/webconfig/nodejs/public/javascripts/dataStructures.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/dataStructures.js b/modules/webconfig/nodejs/public/javascripts/dataStructures.js
index 8f64ed7..2462708 100644
--- a/modules/webconfig/nodejs/public/javascripts/dataStructures.js
+++ b/modules/webconfig/nodejs/public/javascripts/dataStructures.js
@@ -44,6 +44,41 @@ eventGroups = {
'EVT_IGFS_META_UPDATED', 'EVT_IGFS_DIR_CREATED', 'EVT_IGFS_DIR_RENAMED', 'EVT_IGFS_DIR_DELETED']
};
-if (exports) {
+jdbcTypes = {
+ BIT: {value: "BIT", code: -7, label: "BIT"},
+ TINYINT: {value: "TINYINT", code: -6, label: "TINYINT"},
+ SMALLINT: {value: "SMALLINT", code: 5, label: "SMALLINT"},
+ INTEGER: {value: "INTEGER", code: 4, label: "INTEGER"},
+ BIGINT: {value: "BIGINT", code: -5, label: "BIGINT"},
+ FLOAT: {value: "FLOAT", code: 6, label: "FLOAT"},
+ REAL: {value: "REAL", code: 7, label: "REAL"},
+ DOUBLE: {value: "DOUBLE", code: 8, label: "DOUBLE"},
+ NUMERIC: {value: "NUMERIC", code: 2, label: "NUMERIC"},
+ DECIMAL: {value: "DECIMAL", code: 3, label: "DECIMAL"},
+ CHAR: {value: "CHAR", code: 1, label: "CHAR"},
+ VARCHAR: {value: "VARCHAR", code: 12, label: "VARCHAR"},
+ DATE: {value: "DATE", code: 91, label: "DATE"},
+ TIME: {value: "TIME", code: 92, label: "TIME"},
+ TIMESTAMP: {value: "TIMESTAMP", code: 93, label: "TIMESTAMP"},
+ BINARY: {value: "BINARY", code: -2, label: "BINARY"}
+};
+
+javaTypes = {
+ INTEGER: {value: "java.lang.Integer", label: "Integer"},
+ LONG: {value: "java.lang.Long", label: "Long"},
+ BIGDECIMAL: {value: "java.math.BigDecimal", label: "BigDecimal"},
+ FLOAT: {value: "java.lang.Float", label: "Float"},
+ DOUBLE: {value: "java.lang.Double", label: "Double"},
+ STRING: {value: "java.lang.String", label: "String"},
+ BOOLEAN: {value: "java.lang.Boolean", label: "Boolean"},
+ BYTE_ARRAY: {value: "byte[]", label: "byte[]"},
+ DATE: {value: "java.sql.Date", label: "Date"},
+ TIME: {value: "java.sql.Time", label: "Time"},
+ TIMESTAMP: {value: "java.sql.Timestamp", label: "Timestamp"}
+};
+
+if (typeof window === 'undefined') {
exports.eventGroups = eventGroups;
+ exports.jdbcTypes = jdbcTypes;
+ exports.javaTypes = javaTypes;
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/40f5a313/modules/webconfig/nodejs/routes/persistences.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/persistences.js b/modules/webconfig/nodejs/routes/persistences.js
index e1f726d..b1dfdb7 100644
--- a/modules/webconfig/nodejs/routes/persistences.js
+++ b/modules/webconfig/nodejs/routes/persistences.js
@@ -17,6 +17,7 @@
var router = require('express').Router();
var db = require('../db');
+var ds = require('../public/javascripts/dataStructures.js'), jdbcTypes = ds.jdbcTypes, javaTypes = ds.javaTypes;
/**
* Send spaces and persistences accessed for user account.
@@ -88,9 +89,56 @@ router.post('/remove', function(req, res) {
})
});
+// simple countdown latch
+function CDL(countdown, completion) {
+ this.countDown = function() {
+ if(--countdown < 1) completion();
+ };
+}
+
+/**
+ * @param name Source name.
+ * @return String converted to java class name notation.
+ */
+function toJavaClassName(name) {
+ var len = name.length;
+
+ var buf = [];
+
+ var capitalizeNext = true;
+
+ for (var i = 0; i < len; i++) {
+ var ch = name.charAt(i);
+
+ if (' ' == ch || '_' == ch)
+ capitalizeNext = true;
+ else if (capitalizeNext) {
+ buf.push(ch.toUpperCase());
+
+ capitalizeNext = false;
+ }
+ else
+ buf.push(ch.toLowerCase());
+ }
+
+ return buf.join("");
+}
+
+/**
+ * @param name Source name.
+ * @return String converted to java field name notation.
+ */
+function toJavaFieldName(name) {
+ var javaName = toJavaClassName(name);
+
+ return javaName.charAt(0).toLowerCase() + javaName.substring(1);
+}
+
+
//
router.post('/pg', function(req, res) {
var pg = require('pg');
+ var util = require('util');
var host = req.body.host;
var port = req.body.port;
@@ -100,22 +148,164 @@ router.post('/pg', function(req, res) {
var dbName = req.body.dbName;
- var connectionString = sprintf('postgres://%s:%s@%s:%d/%s', username, password, host, port, dbName);
+ var connectionString = util.format('postgres://%s:%s@%s:%d/%s', username, password, host, port, dbName);
pg.connect(connectionString, function(err, client, done) {
- if(err)
+ var sendError = function (err) {
+ done();
+
res.status(500).send(err.message);
+ };
+
+ if(err)
+ return sendError(err);
- client.query('select * from information_schema.tables', function(err, result) {
- //call `done()` to release the client back to the pool
+ var sendResponse = function () {
done();
+ console.log(JSON.stringify(tables));
+
+ res.status(200).send(tables);
+ }, jdbcType = function (dataType) {
+ switch (dataType) {
+ case 'smallint':
+ case 'int2':
+ return jdbcTypes.SMALLINT;
+ case 'integer':
+ case 'int':
+ case 'int4':
+ return jdbcTypes.INTEGER;
+ case 'oid':
+ case 'bigint':
+ case 'int8':
+ return jdbcTypes.BIGINT;
+ case 'money':
+ return jdbcTypes.DOUBLE;
+ case 'decimal':
+ case 'numeric':
+ return jdbcTypes.NUMERIC;
+ case 'float4':
+ return jdbcTypes.REAL;
+ case 'float':
+ case 'float8':
+ return jdbcTypes.DOUBLE;
+ case 'char':
+ case 'bpchar':
+ return jdbcTypes.CHAR;
+ case 'varchar':
+ case 'text':
+ case 'name':
+ return jdbcTypes.VARCHAR;
+ case 'bytea':
+ return jdbcTypes.BINARY;
+ case 'boolean':
+ case 'bool':
+ case 'bit':
+ return jdbcTypes.BIT;
+ case 'date':
+ return jdbcTypes.DATE;
+ case 'time':
+ case 'timetz':
+ return jdbcTypes.TIME;
+ case 'timestamp':
+ case 'timestamptz':
+ return jdbcTypes.TIMESTAMP;
+ }
+ }, javaType = function (dataType) {
+ switch (dataType) {
+ case jdbcTypes.SMALLINT:
+ case jdbcTypes.INTEGER:
+ return javaTypes.INTEGER;
+ case jdbcTypes.BIGINT:
+ return javaTypes.LONG;
+ case jdbcTypes.DOUBLE:
+ return javaTypes.DOUBLE;
+ case jdbcTypes.NUMERIC:
+ return javaTypes.BIGDECIMAL;
+ case jdbcTypes.REAL:
+ return javaTypes.FLOAT;
+ case jdbcTypes.CHAR:
+ case jdbcTypes.VARCHAR:
+ return javaTypes.STRING;
+ case jdbcTypes.BINARY:
+ return javaTypes.BYTE_ARRAY;
+ case jdbcTypes.BIT:
+ return javaTypes.BOOLEAN;
+ case jdbcTypes.DATE:
+ return javaTypes.DATE;
+ case jdbcTypes.TIME:
+ return javaTypes.TIME;
+ case jdbcTypes.TIMESTAMP:
+ return javaTypes.TIMESTAMP;
+ }
+ };
+
+ var tables = [];
+
+ client.query(
+ 'SELECT table_schema, table_name ' +
+ 'FROM information_schema.tables ' +
+ 'WHERE table_schema = ANY (current_schemas(false)) ' +
+ 'ORDER BY table_schema, table_name', function(err, result) {
+
if(err)
- res.status(500).send(err.message);
+ return sendError(err);
+
+ if (result.rows.length > 0) {
+ // usage
+ var latch = new CDL(result.rows.length, sendResponse);
+
+ result.rows.forEach(function (table) {
+
+ var indisprimary = client.query(
+ "SELECT a.attname " +
+ "FROM pg_index i " +
+ "JOIN pg_attribute a " +
+ " ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) " +
+ "WHERE i.indrelid = $1::regclass AND i.indisprimary", [table.table_schema + '.' + table.table_name],
+ function (err, result) {
+ if (err)
+ return sendError(err);
+
+ var pks = result.rows.map(function(row) {
+ return row.attname;
+ });
+
+ client.query(
+ 'SELECT column_name, udt_name, is_nullable ' +
+ 'FROM information_schema.columns ' +
+ 'WHERE table_schema = $1 AND table_name = $2', [table.table_schema, table.table_name],
+ function (err, result) {
+ if (err)
+ return sendError(err);
+
+ var cols = [];
+
+ result.rows.forEach(function (column) {
+ var dataType = jdbcType(column.udt_name);
+
+ cols.push({
+ pk: pks.indexOf(column.column_name) >= 0,
+ use: true,
+ notNull: column.is_nullable == 'NO',
+ dbName: column.column_name, dbType: dataType,
+ javaName: toJavaFieldName(column.column_name), javaType: javaType(dataType) });
+ });
+
+ var valClsName = toJavaClassName(table.table_name);
- console.log(result.rows[0]);
+ tables.push({
+ use: true,
+ schemaName: table.table_schema, tableName: table.table_name,
+ keyClass: valClsName + 'Key', valueClass: valClsName,
+ columns: cols
+ });
- res.sendStatus(200);
+ latch.countDown();
+ })
+ });
+ });
+ }
});
});
});
[2/2] incubator-ignite git commit: Merge remote-tracking branch
'origin/ignite-843' into ignite-843
Posted by an...@apache.org.
Merge remote-tracking branch 'origin/ignite-843' into ignite-843
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/7850b0dd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/7850b0dd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/7850b0dd
Branch: refs/heads/ignite-843
Commit: 7850b0dd30d54818693599152c74376ab70cb1e0
Parents: 40f5a31 8e63378
Author: Andrey <an...@gridgain.com>
Authored: Tue Jun 30 18:08:45 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Tue Jun 30 18:08:45 2015 +0700
----------------------------------------------------------------------
.../javascripts/controllers/persistences.js | 21 ++++++++-
.../nodejs/public/stylesheets/style.css | 2 +-
.../nodejs/public/stylesheets/style.less | 18 +++++++-
modules/webconfig/nodejs/views/persistence.jade | 46 +++++++++++---------
4 files changed, 63 insertions(+), 24 deletions(-)
----------------------------------------------------------------------