Advertisement
Guest User

VoltMetadataHandler

a guest
May 9th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var VoltConfiguration = require('voltjs/lib/configuration');
  2. var VoltClient = require('voltjs/lib/client');
  3. var VoltQuery = require('voltjs/lib/query');
  4. var printer = require('./Printer');
  5.  
  6. function VoltMetadataHandler(table, host, user, password) {
  7.     this.table = table;
  8.     this.host = host;
  9.     this.user = user;
  10.     this.password = password;
  11.     this.client;
  12.     this.partitionKeyMetadata = "";
  13.     this.columnsMetadata = [];
  14.     this.pkMetadata = [];
  15.  
  16.     this.initialize = function (callback) {
  17.         printer.putOutput("Conectandose a VoltDB", printer.REGULAR_INIT_PROCESS);
  18.         //Establecemos la conexion con el servidor
  19.         var configs = []
  20.         var configuration = new VoltConfiguration();
  21.         configuration.host = this.host;
  22.         configs.push(configuration);
  23.         var client = new VoltClient(configs);
  24.  
  25.         var self = this;
  26.         client.connect(function startup(code, event, results) {
  27.             printer.putOutput('Conexión a VoltDB exitosa', printer.REGULAR_END_PROCESS);
  28.             //Definimos el procedimiento
  29.             var catalogProc = new VoltProcedure('@SystemCatalog', ['string']);
  30.             self.initColumns(client, catalogProc, callback);
  31.  
  32.         }, function loginError(code, event, results) {
  33.             printer.putOutput('Error al conectarse a VoltDB', printer.ERROR);
  34.         });
  35.     }
  36.  
  37.     this.initColumns = function (client, catalogProc, callback) {
  38.         //Creamos el query para obtener las columnas
  39.         var query = catalogProc.getQuery();
  40.         query.setParameters(['columns']);
  41.         var self = this;
  42.         printer.putOutput("Se iniciará identificación de columnas", printer.REGULAR_INIT_PROCESS);
  43.         client.callProcedure(query, function initPrimaryKeys(code, event, results) {
  44.             var columnsResult = results.table[0];
  45.             for (var i = 0; i < columnsResult.length; i++) {
  46.                 var row = columnsResult[i];
  47.                 if (row.TABLE_NAME == table) {
  48.                     var newElement = {};
  49.                     newElement.columnName = row.COLUMN_NAME;
  50.                     newElement.type = row.TYPE_NAME;
  51.                     newElement.position = row.ORDINAL_POSITION;
  52.                     self.columnsMetadata.push(newElement);
  53.                 }
  54.             }
  55.             self.columnsMetadata.sort(function(a, b) {
  56.                     return a.position - b.position;
  57.             });
  58.             printer.putOutput("Identificación de columnas finalizada", printer.REGULAR_END_PROCESS);
  59.             console.log(self.columnsMetadata);
  60.             self.initPartitionKey(client, catalogProc, callback);
  61.         });
  62.     }
  63.  
  64.     this.initPartitionKey = function (client, catalogProc, callback) {
  65.         //Creamos el query para obtener las columnas
  66.         var query = catalogProc.getQuery();
  67.         query.setParameters(['tables']);
  68.         var self = this;
  69.         printer.putOutput("Se iniciará identificación de PartitionKey", printer.REGULAR_INIT_PROCESS);
  70.         client.callProcedure(query, function initPrimaryKeys(code, event, results) {
  71.             var tablesResult = results.table[0];
  72.             for (var i = 0; i < tablesResult.length; i++) {
  73.                 var row = tablesResult[i];
  74.                 if (row.TABLE_NAME == table) {
  75.                     try {
  76.                         self.partitionKeyMetadata = JSON.parse(row.REMARKS).partitionColumn;
  77.                         break;
  78.                     } catch (err) {
  79.                         break;
  80.                     }
  81.  
  82.                 }
  83.             }
  84.  
  85.             if (self.partitionKeyMetadata == "") {
  86.                 printer.putOutput("La tabla no tiene PartitionKey definido", printer.WARNING);
  87.             } else {
  88.                 printer.putOutput("Identificación de PartitionKey finalizada " + self.partitionKeyMetadata, printer.REGULAR_END_PROCESS);
  89.             }
  90.             self.initPrimaryKey(client, catalogProc, callback);
  91.         });
  92.     }
  93.  
  94.     this.initPrimaryKey = function (client, catalogProc, callback) {
  95.         //Creamos el query para obtener las columnas
  96.         var query = catalogProc.getQuery();
  97.         query.setParameters(['primarykeys']);
  98.         var self = this;
  99.         printer.putOutput("Se iniciará identificación de PrimaryKey", printer.REGULAR_INIT_PROCESS);
  100.         client.callProcedure(query, function initPrimaryKeys(code, event, results) {
  101.             var pksResult = results.table[0];
  102.             for (var i = 0; i < pksResult.length; i++) {
  103.                 var row = pksResult[i];
  104.                 if (row.TABLE_NAME == table) {
  105.                     //self.pkMetadata.push(row.COLUMN_NAME);
  106.                     //Buscamos en las columnas la clave primaria para poder extraer tambien el tipo de dato
  107.                     for (var j = 0; j < self.columnsMetadata.length; j++) {
  108.                         if (self.columnsMetadata[j].columnName == row.COLUMN_NAME) {
  109.                             self.pkMetadata.push(self.columnsMetadata[j]);
  110.                             break;
  111.                         }
  112.                     }
  113.                 }
  114.             }
  115.             self.pkMetadata.sort(function(a, b) {
  116.                     return a.position - b.position;
  117.             });
  118.             printer.putOutput("Identificación de PrimaryKey finalizada ", printer.REGULAR_END_PROCESS);
  119.             console.log(self.pkMetadata);
  120.             client.exit(function () {
  121.                 printer.putOutput("Conexión cerrada", printer.REGULAR);
  122.             });
  123.             callback();
  124.         });
  125.     }
  126. }
  127. module.exports = VoltMetadataHandler;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement