Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var VoltConfiguration = require('voltjs/lib/configuration');
- var VoltClient = require('voltjs/lib/client');
- var VoltQuery = require('voltjs/lib/query');
- var printer = require('./Printer');
- function VoltMetadataHandler(table, host, user, password) {
- this.table = table;
- this.host = host;
- this.user = user;
- this.password = password;
- this.client;
- this.partitionKeyMetadata = "";
- this.columnsMetadata = [];
- this.pkMetadata = [];
- this.initialize = function (callback) {
- printer.putOutput("Conectandose a VoltDB", printer.REGULAR_INIT_PROCESS);
- //Establecemos la conexion con el servidor
- var configs = []
- var configuration = new VoltConfiguration();
- configuration.host = this.host;
- configs.push(configuration);
- var client = new VoltClient(configs);
- var self = this;
- client.connect(function startup(code, event, results) {
- printer.putOutput('Conexión a VoltDB exitosa', printer.REGULAR_END_PROCESS);
- //Definimos el procedimiento
- var catalogProc = new VoltProcedure('@SystemCatalog', ['string']);
- self.initColumns(client, catalogProc, callback);
- }, function loginError(code, event, results) {
- printer.putOutput('Error al conectarse a VoltDB', printer.ERROR);
- });
- }
- this.initColumns = function (client, catalogProc, callback) {
- //Creamos el query para obtener las columnas
- var query = catalogProc.getQuery();
- query.setParameters(['columns']);
- var self = this;
- printer.putOutput("Se iniciará identificación de columnas", printer.REGULAR_INIT_PROCESS);
- client.callProcedure(query, function initPrimaryKeys(code, event, results) {
- var columnsResult = results.table[0];
- for (var i = 0; i < columnsResult.length; i++) {
- var row = columnsResult[i];
- if (row.TABLE_NAME == table) {
- var newElement = {};
- newElement.columnName = row.COLUMN_NAME;
- newElement.type = row.TYPE_NAME;
- newElement.position = row.ORDINAL_POSITION;
- self.columnsMetadata.push(newElement);
- }
- }
- self.columnsMetadata.sort(function(a, b) {
- return a.position - b.position;
- });
- printer.putOutput("Identificación de columnas finalizada", printer.REGULAR_END_PROCESS);
- console.log(self.columnsMetadata);
- self.initPartitionKey(client, catalogProc, callback);
- });
- }
- this.initPartitionKey = function (client, catalogProc, callback) {
- //Creamos el query para obtener las columnas
- var query = catalogProc.getQuery();
- query.setParameters(['tables']);
- var self = this;
- printer.putOutput("Se iniciará identificación de PartitionKey", printer.REGULAR_INIT_PROCESS);
- client.callProcedure(query, function initPrimaryKeys(code, event, results) {
- var tablesResult = results.table[0];
- for (var i = 0; i < tablesResult.length; i++) {
- var row = tablesResult[i];
- if (row.TABLE_NAME == table) {
- try {
- self.partitionKeyMetadata = JSON.parse(row.REMARKS).partitionColumn;
- break;
- } catch (err) {
- break;
- }
- }
- }
- if (self.partitionKeyMetadata == "") {
- printer.putOutput("La tabla no tiene PartitionKey definido", printer.WARNING);
- } else {
- printer.putOutput("Identificación de PartitionKey finalizada " + self.partitionKeyMetadata, printer.REGULAR_END_PROCESS);
- }
- self.initPrimaryKey(client, catalogProc, callback);
- });
- }
- this.initPrimaryKey = function (client, catalogProc, callback) {
- //Creamos el query para obtener las columnas
- var query = catalogProc.getQuery();
- query.setParameters(['primarykeys']);
- var self = this;
- printer.putOutput("Se iniciará identificación de PrimaryKey", printer.REGULAR_INIT_PROCESS);
- client.callProcedure(query, function initPrimaryKeys(code, event, results) {
- var pksResult = results.table[0];
- for (var i = 0; i < pksResult.length; i++) {
- var row = pksResult[i];
- if (row.TABLE_NAME == table) {
- //self.pkMetadata.push(row.COLUMN_NAME);
- //Buscamos en las columnas la clave primaria para poder extraer tambien el tipo de dato
- for (var j = 0; j < self.columnsMetadata.length; j++) {
- if (self.columnsMetadata[j].columnName == row.COLUMN_NAME) {
- self.pkMetadata.push(self.columnsMetadata[j]);
- break;
- }
- }
- }
- }
- self.pkMetadata.sort(function(a, b) {
- return a.position - b.position;
- });
- printer.putOutput("Identificación de PrimaryKey finalizada ", printer.REGULAR_END_PROCESS);
- console.log(self.pkMetadata);
- client.exit(function () {
- printer.putOutput("Conexión cerrada", printer.REGULAR);
- });
- callback();
- });
- }
- }
- module.exports = VoltMetadataHandler;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement