UNPKG

raksix-cassandra

Version:
111 lines (105 loc) 3.98 kB
const cassandra = require("cassandra-driver"); const raksix = {} raksix.connect = (secure_path, client_id, client_secret, keyspace) => { return { //Cassandra Client Connection client: new cassandra.Client({ cloud: { secureConnectBundle: secure_path }, credentials: { username: client_id, password: client_secret }, keyspace: keyspace }), //Cassandra Create table create_table: function (table, data) { let data_arr = [] Object.keys(data).map(a => { data_arr.push(`${a} ${data[a]}`) }) return this.client.execute(`CREATE TABLE IF NOT EXISTS ${table} (${data_arr.join()})`) }, //Cassandra insert instert: function (table, data) { let data_arr = [] let values = [] let s = [] Object.values(data).map(a => { values.push(String(a)) s.push("?") }) Object.keys(data).map(a => { data_arr.push(`${a}`) }) return this.client.execute(`INSERT INTO ${table} (${data_arr.join()}) VALUES (${s.join()})`, values) }, //Cassandra SELECT * FROM <table> find_all: function (table, options) { let ops = { limit: 5000 } if (options) { if (options.limit) { ops.limit = options.limit } } return this.client.execute(`SELECT * FROM ${table}`, [], { fetchSize: ops.limit, }) }, //Cassandra SELECT * FROM <table> WHERE ? find: function (table, data, options) { let ops = { limit: 5000 } if (options) { if (options.limit) { ops.limit = options.limit } } const key = Object.keys(data) const value = Object.values(data) if (key.length < 2 && value.length < 2) { return this.client.execute(`SELECT * FROM ${table} WHERE ${key[0]} = ? ALLOW FILTERING`, [value[0]], { fetchSize: ops.limit }) } else { let keys_arr = [] key.map((a, idx) => { let keys_idx = key.length - 1 if (keys_idx > idx) { keys_arr.push(`${a} = ? AND`) } else { keys_arr.push(`${a} = ?`) } }) let all_keys = keys_arr.join().replaceAll(",", " ") return this.client.execute(`SELECT * FROM ${table} WHERE ${all_keys} ALLOW FILTERING`, value, { fetchSize: ops.limit }) } }, //Cassandra update method update: function (table, find, data) { const Dkey = Object.keys(data) const key = Object.keys(find) const update_arr = [] const keys_arr = [] const this_arr = [] Dkey.map(a => { update_arr.push(data[a]) this_arr.push(`${a} = ?`) }) key.map((a, idx) => { let keys_idx = key.length - 1 update_arr.push(find[a]) if (keys_idx > idx) { keys_arr.push(`${a} = ? AND`) } else { keys_arr.push(`${a} = ?`) } }) let all_keys = keys_arr.join().replaceAll(",", " ") const this_set = this_arr.join() return this.client.execute(`UPDATE ${table} SET ${this_set} WHERE ${all_keys}`, update_arr) } } } module.exports = raksix