Advertisement
Guest User

Db file

a guest
May 26th, 2016
776
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Query
  2. /*
  3. *
  4. *   @param jdbc Database object
  5. *   @param id Id to be compared on
  6. *   @param cb Callback function
  7. */
  8. function (jdbc, id, cb){
  9.     var query = 'SELECT "query", "description", "type" FROM TEST WHERE "t_id" = ?';
  10.    
  11.     jdbc.connection(function(err, con){    
  12.         if(err)
  13.             logger.logError('There was an error when connecting');  
  14.         jdbc.prepare(con, query, true, function(err, ps){        
  15.             setInt(ps, id);    
  16.             ps.executeQuery(function(err, resultSet){    
  17.                 resultSet.toObject(function(err, obj){      
  18.                     cb(err, obj.rows);          
  19.                 });        
  20.             });  
  21.        });      
  22.     });
  23. }
  24.  
  25.  
  26. // DB FILE
  27.  
  28. var path = require('path');
  29. var fs = require('fs');
  30. var errors = require('../../utilities/errors');
  31. var logger = require('../../utilities/clog');
  32. //object for making & consolidating a db connection
  33.  
  34. var JDBC = require('jdbc');
  35. var jinst = require('jdbc/lib/jinst')
  36. var _ = require('underscore');
  37. var dbConneInit = false;
  38.  
  39. function dbConnection(db, cb, minPoolSize, maxPoolSize){
  40.  
  41.     var dbConn = this;
  42.  
  43.     var prefix = '';
  44.  
  45.     var jarPath = db['*JDBC_driver_path'];
  46.     var connOpts = {
  47.         libpath: jarPath,
  48.         drivername: '',
  49.         url: ''
  50.     };
  51.     fs.exists(jarPath, function(exists){
  52.         if(!exists){
  53.             jarPath = path.join(__dirname,'..', '..', '..','jdbc', jarPath);
  54.             fs.exists(jarPath, function(exists){
  55.                 if(!exists){
  56.                     console.log(jarPath + ' is not a valid path/file!');
  57.                 }else{
  58.                     initJDBC();
  59.                 }
  60.             });
  61.         }else{
  62.             initJDBC();
  63.         }
  64.     });
  65.  
  66.  
  67.     function initJDBC()
  68.     {
  69.         connOpts.libpath = jarPath;
  70.         var file = path.basename(jarPath);
  71.         var useOverride = db.use_override_url;
  72.  
  73.         if(file == 'ojdbc6.jar'){ //oracle db
  74.             connOpts.drivername = 'oracle.jdbc.OracleDriver';
  75.  
  76.             if(useOverride) {
  77.                 connOpts.url = db.override_url;
  78.                 console.log("[********** USE OVERRIDE ENABLED : " + useOverride);
  79.                 console.log("[********** DB CONNECTION STRING : " + db.override_url);
  80.             }
  81.             else
  82.                 connOpts.url = 'jdbc:oracle:thin:' + db.username + '/' + db.password + '@' + db.hostname + ':' + db.port +':'+ db.sid_or_db_name;
  83.  
  84.             dbConn.getVersionInfo = function getVersionInfo(cb){
  85.                 doQuery('SELECT * FROM v$version', function(err, data){
  86.                     if(err) return cb(err);
  87.  
  88.                     var info = [];
  89.                     data.forEach(function(val){
  90.                         info.push(val.BANNER);
  91.                     });
  92.                     cb(err, info);
  93.                 });
  94.             };
  95.  
  96.         }else if(file.match('mysql-connector')){ //else MySQL db
  97.             connOpts.drivername = 'com.mysql.jdbc.Driver';
  98.  
  99.             if(useOverride)
  100.                 connOpts.url = db.override_url;
  101.             else
  102.                 connOpts.url = 'jdbc:mysql://' + db.hostname + ':' + db.port +'/' + db.sid_or_db_name + '?user=' + db.username + '&password=' + db.password;
  103.  
  104.  
  105.  
  106.             dbConn.getVersionInfo = function getVersionInfo(cb){
  107.                 doQuery('SHOW VARIABLES LIKE "%version%"', function(err, data){
  108.                     if(err) return cb(err);
  109.  
  110.                     var info = [];
  111.                     data.forEach(function(val){
  112.                         info.push(val.VARIABLE_NAME +' : ' + val.VARIABLE_VALUE);
  113.                     });
  114.                     cb(err, info);
  115.                 });
  116.             };
  117.  
  118.         }else if(file.match('db2jcc')){ //else DB2
  119.             connOpts.drivername = 'com.ibm.db2.jcc.DB2Driver';
  120.  
  121.  
  122.             if(useOverride)
  123.                 connOpts.url = db.override_url;
  124.             else
  125.                 connOpts.url = 'jdbc:db2://' + db.hostname + ':' + db.port + '/' + db.sid_or_db_name +
  126.                 ':user=' + db.username + ';password=' + db.password +';';
  127.  
  128.             if(db.default_schema)
  129.                 connOpts.url += 'currentSchema=' + db.default_schema + ';';
  130.             prefix = db.default_schema? db.default_schema + '.': '';
  131.  
  132.  
  133.             dbConn.getVersionInfo = function getVersionInfo(cb){
  134.                 doQuery('SELECT * FROM SYSIBMADM.ENV_INST_INFO', function(err, data){
  135.                     if(err) return cb(err);
  136.  
  137.                     var info = [];
  138.                     data = data[0];
  139.                     for(var key in data)
  140.                         info.push(key + ': ' + data[key]);
  141.                     cb(err, info);
  142.                 });
  143.                
  144.             };
  145.  
  146.         }else if(file.match('sqljdbc')){ //else SQL server db
  147.             connOpts.drivername = 'com.microsoft.sqlserver.jdbc.SQLServerDriver';
  148.  
  149.  
  150.             if(useOverride)
  151.                 connOpts.url = db.override_url;
  152.             else
  153.                 connOpts.url = 'jdbc:sqlserver://' + db.hostname + ':' + db.port + ';' +
  154.                 'databaseName=' + db.sid_or_db_name + ';user=' + db.username + ';password=' + db.password + ';';
  155.             prefix = db.default_schema? db.default_schema + '.': '';
  156.  
  157.  
  158.             dbConn.getVersionInfo = function getVersionInfo(cb){
  159.                 doQuery('SELECT @@VERSION', function(err, data){
  160.                     if(err) return cb(err);
  161.                     var info = [];
  162.                     data = data[0];
  163.                     for(var key in data)
  164.                         info.push(data[key]);
  165.                     cb(err, info);
  166.                 });
  167.             };
  168.  
  169.         }else{
  170.             console.log('ERROR: Unsupported JDBC driver: ' + connOpts.libpath + '\nExternal database access is impossible!');
  171.         }
  172.        
  173.         if (!jinst.isJvmCreated())
  174.         {
  175.             jinst.addOption("-Xrs");
  176.             jinst.setupClasspath([connOpts.libpath]);
  177.         }
  178.        
  179.         dbConn.JDBC = new JDBC({
  180.             url: connOpts.url,
  181.             minpoolsize : minPoolSize,
  182.             maxpoolsize: maxPoolSize,
  183.             drivername : connOpts.drivername,
  184.  
  185.             });
  186.        
  187.        
  188.         if(cb) cb();
  189.     }
  190.  
  191.     // prints error if theres an error
  192.     function errCatch(err, query){
  193.         if(err) console.log('\n' + query + '\n\n' + err);
  194.     }
  195.    
  196.    
  197.     /**
  198.     * Convenience 'from' sql query clause.
  199.     * MS sql server needs schema to prefix tables. This method
  200.     * will know and add the prefix when needed.
  201.     *
  202.     * from('yourtable', 'someothertable') //as many as you want
  203.     *
  204.     * @params variable length of table strings
  205.     * @return formatted FROM clause string
  206.     */
  207.     this.from = function from(){
  208.         var rtn = ' FROM ';
  209.         for(var i=0; i<arguments.length; i++)
  210.             rtn += prefix + arguments[i] + ' ';
  211.         return rtn.length > 6? rtn: '';
  212.     };
  213.    
  214.    
  215.    
  216.     this.doQuery = function(query, cb){
  217.  
  218.         this.connection(function(err, con){
  219.            
  220.             errCatch(err, query);
  221.  
  222.             executeQuery(con, query, function(err, data){
  223.            
  224.                 errCatch(err, query)
  225.                            
  226.                 data.toObject(function(err, result){
  227.                    
  228.                     errCatch(err, query);                  
  229.                     cb(null, result.rows);
  230.                 });
  231.  
  232.             });    
  233.         });
  234.     }
  235.    
  236.     this.doUpdate = function(query, cb){
  237.         this.connection(function(err, con){
  238.            
  239.             errCatch(err, query);
  240.            
  241.             executeUpdate(con, query, function(err, data){
  242.                
  243.                 errCatch(err, query);
  244.                 cb(err, data);
  245.             });    
  246.         });
  247.     }
  248.    
  249.                
  250.     this.tableexists = function(db, catalog, schema, name, callback) {
  251.     reserve(db, function(err, connobj, conn) {
  252.         conn.getMetaData(function(err, metadata) {
  253.         if (err) {
  254.             release(db, connobj, err, null, callback);
  255.         } else {
  256.             metadata.getTables(catalog, schema, name, null, function(err, resultset) {
  257.             if (err) {
  258.                 release(db, connobj, err, null, callback);
  259.             } else {
  260.                 resultset.toObjArray(function(err, results) {
  261.                     release(db, connobj, err, results.length > 0, callback);
  262.                 });
  263.             }
  264.             });
  265.         }
  266.         });
  267.     });
  268.     }
  269.    
  270.     this.executePreparedStatement = function(sql, generatedKeys, callback)
  271.     {  
  272.         var that = this;
  273.  
  274.         that.connection(function(err, con){
  275.            
  276.             if(err)
  277.                 logger.logError('THERE WAS AN ERROR CONNECTING TO DB: ' + err);
  278.            
  279.             that.prepare(con, sql, generatedKeys, callback) ;    
  280.            
  281.         });
  282.    
  283.     }
  284.    
  285.    
  286.     this.prepare = function(db, sql, generatedKeys, callback) {
  287.         reserve(db, function(err, connobj, conn)
  288.         {
  289.             if(!generatedKeys)
  290.             {
  291.                 conn.prepareStatement(sql, function(err, preparedstatement) {
  292.                     release(db, connobj, err, preparedstatement, callback);
  293.                 });
  294.             }
  295.             else
  296.             {
  297.                 conn.prepareStatement(sql, 1, function(err, preparedstatement) {
  298.                                        
  299.                 release(db, connobj, err, preparedstatement, callback);
  300.                
  301.                 });
  302.             }
  303.         });
  304.     };
  305.  
  306.     this.prepareCall = function(db, sql, callback) {
  307.         reserve(db, function(err, connobj, conn) {
  308.             conn.prepareCall(sql, function(err, callablestatement) {
  309.                 release(db, connobj, err, callablestatement, callback);
  310.             });
  311.         });
  312.     }
  313.    
  314.    
  315.  
  316.     this.metadata = function(db, callback) {
  317.     reserve(db, function(err, connobj, conn) {
  318.         conn.getMetaData(function(err, metadata) {
  319.         release(db, connobj, err, metadata, callback);
  320.         });
  321.     });
  322.     }
  323.    
  324.     this.connection = function (callback)
  325.     {
  326.         if (!dbConneInit) {
  327.             dbConn.JDBC.initialize(function(err) {
  328.             if (err) {
  329.                 return callback(err);
  330.             } else {
  331.                 dbConneInit = true;
  332.                 return callback(null, dbConn.JDBC);
  333.             }
  334.             });
  335.         } else {
  336.             return callback(null, dbConn.JDBC);
  337.         }
  338.     }
  339. }
  340.  
  341.  
  342. function reserve(db, callback)
  343. {
  344.   db.reserve(function(err, connobj)
  345.   {
  346.     //logger.logInfo('reserveing connection');
  347.     if (err) {
  348.       return callback(err + ' error accquiring connection');
  349.     } else
  350.     {
  351.       return callback(null, connobj, connobj.conn);
  352.     }
  353.   });
  354. }
  355.  
  356. function release(db, connobj, err, result, callback)
  357. {
  358.    
  359.   db.release(connobj, function(e)
  360.   {
  361.     //logger.logInfo('releasing connection');
  362.     if (err) {
  363.       return callback(err + ' error releaseing connection');
  364.     } else
  365.     {
  366.       return callback(null, result);
  367.     }
  368.   });
  369. }
  370.  
  371. var dbs = {};
  372. exports.dbs = dbs;
  373. /**
  374. * Loads the database configurations & makes new dbConnections.
  375. * Will not overwrite unless force is true.
  376. *
  377. * @param force boolean to tru if you want to force a load even if there's already databases.
  378. */
  379. function loadQaDatabase(force){
  380.     if(force){
  381.         for(var key in dbs)
  382.             delete dbs[key];
  383.     }
  384.     var db = require('../../../config.js').jdbc;
  385.  
  386.     //If database is set to not active, make sure it's not being used.
  387.     if(!db.platform.active) {
  388.         errors.missingFeature('Platform Database Is Not Active');
  389.     }
  390.     else if(db.qa.active)
  391.     {
  392.         if(!dbs.qa) dbs.qa = new dbConnection(db.qa, null, 200, 600);
  393.     }
  394. }
  395.  
  396. exports.load = loadQaDatabase;
  397.  
  398.  
  399. function executeQuery (db, sql, callback)
  400. {
  401.     reserve(db, function(err, connobj, conn) {
  402.         conn.createStatement(function(err, statement) {
  403.         if (err) {
  404.             release(db, connobj, err, null, callback);
  405.         } else {
  406.             statement.executeQuery(sql, function(err, result) {
  407.             release(db, connobj, err, result, callback);
  408.             });
  409.         }
  410.         });
  411.     });
  412. }
  413.  
  414. function executeUpdate(db, sql, callback) {
  415.         reserve(db, function(err, connobj, conn) {
  416.             conn.createStatement(function(err, statement) {
  417.             if (err) {
  418.                 release(db, connobj, err, null, callback);
  419.             } else {
  420.                 statement.executeUpdate(sql, function(err, result) {
  421.                 release(db, connobj, err, result, callback);
  422.                 });
  423.             }
  424.             });
  425.         });
  426.     };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement