Add default code of my better module, fucking slave, suck my dick

This commit is contained in:
FullGreaM 2021-07-25 16:29:19 +03:00
parent 17f12db3e2
commit b21860c73f
2 changed files with 257 additions and 0 deletions

109
database.js Normal file
View File

@ -0,0 +1,109 @@
class DataBase {
/**
*
* @readonly
*/
static sqlite3 = require('sqlite3').verbose();
/**
*
* @readonly
*/
static database = new this.sqlite3.Database('./database/database.db');
/**
*
* @param {String[]} keys
* @param {String} table
* @param {String} condition
* @param {Boolean} some
* @param {Function()} callback
*/
static getData(keys, table, condition = '', some = true, callback = () => {}) {
let sql = 'SELECT ';
for (let i = 0; i < keys.length; i++) {
sql += keys[i] === '*' ? keys[i] : '`' + keys[i] + '`';
if (keys.length > i + 1)
sql += ', ';
}
sql += ' FROM `' + table + '` ' + condition;
if (some)
this.database.all(sql, (err, rows) => {
callback(err, rows);
});
else
this.database.get(sql, (err, row) => {
callback(err, row);
});
};
/**
*
* @param {String[]} keys
* @param {Values[]} values
* @param {String} table
* @param {String} condition
* @param {Function()} callback
*/
static updateData(keys, values, table, condition, callback = () => {}) {
let sql = 'UPDATE `' + table + '` SET ';
for (let i = 0; i < keys.length; i++) {
sql += '`' + keys[i] + '` = ' + this.ToString(values[i]);
if (keys.length > i + 1)
sql += ', ';
}
sql += ' ' + condition;
this.database.run(sql, (err) => {
callback(err);
});
}
/**
* @param {String[]} keys
* @param {String[]} values
* @param {String} table
* @param {Function()} callback
*/
static insertData(keys, values, table, callback = () => {}) {
let sql = 'INSERT INTO `' + table + '` (';
for (let i = 0; i < keys.length; i++) {
sql += '`' + keys[i] + '`';
if (keys.length > i + 1)
sql += ', ';
}
sql += ') VALUES (';
for (let i = 0; i < values.length; i++) {
sql += this.ToString(values[i]);
if (values.length > i + 1)
sql += ', ';
}
sql += ')';
this.database.run(sql, (err) => {
callback(err);
});
};
/**
*
* @param {String} table
* @param {String} condition
* @param {Function()} callback
*/
static deleteData(table, condition = '', callback = () => {}) {
this.database.run('DELETE FROM `' + table + '` ' + condition, (err) => {
callback(err);
});
}
static ToString(value) {
return typeof(value) === 'string' ? '\'' + value + '\'' : value;
}
}
module.exports = {
database: DataBase
};

148
index.js Normal file
View File

@ -0,0 +1,148 @@
// const sqlite3 = require('sqlite3').verbose(); // Пошли в пизду со своим ассинхроном, ублюдки!
const sqlite3 = require('better-sqlite3');
class global_data_Parser{
getTable(err, rows){
this.rows = rows;
this.err = err;
// console.log('globalParser:', this.rows);
}
}
class SQLEasy_error extends Error {
constructor(code='GENERIC', status=500, ...params) {
super(...params);
if(Error.captureStackTrace) {
Error.captureStackTrace(this, 'SQLEasy_error');
}
this.code = code;
this.status = status;
}
}
class database {
constructor(path){
this.PATH = path;
// this.db = new sqlite3.Database(this.PATH); // async - heresy!
this.db = new sqlite3(this.PATH);
// Создаём "функции-двойники"
this.getTable = this.getBase;
this.get = this.getTable;
this.select = this.get;
this.set = this.setItem;
this.add = this.insert;
this.update = this.set;
this.remove = this.del;
this.pop = this.del;
this.exec = this.execute;
}
ToString(value) {
return typeof(value) === 'string' ? '\'' + value + '\'' : value;
}
execute(SQLRequest) {
try {
return this.db.prepare(SQLRequest).all();
} catch(err) {
if(err.message.indexOf('run()') !== -1) {
try {
this.db.prepare(SQLRequest).run();
return null;
} catch(err) {
throw new Error(`SQLEasy error: ${err.message}`);
}
}
else{
throw new Error(`SQLEasy error: ${err.message}`);
}
}
}
getBase(table, condition=null, keys='*') {
let SQLRequest = `SELECT ${keys} FROM ${table}`;
if(condition !== null){
let orBlock = new Array();
for(let i = 0; i < condition.length; i++){
let andBlock = new Array();
for(let key in condition[i]){
andBlock.push(`${key}=${this.ToString(condition[i][key])}`);
}
orBlock.push(`(${andBlock.join(' AND ')})`);
}
SQLRequest = `${SQLRequest} WHERE ${orBlock.join(' OR ')}`;
}
// console.log(SQLRequest); // Убрать после тестов!!
try {
let rows = this.db.prepare(SQLRequest).all();
if(rows !== null & rows !== undefined) return rows;
else throw new Error('SQLEasy error: Rows given null.');
} catch(err) {
if(err.message.indexOf('no such table') !== -1){
throw new Error('SQLEasy error: this table not founded.');
}
else throw new Error(`SQLEasy error: ${err.message}`);
}
}
add(table, addvArray, ignore=false){
this.getBase(table);
let SQLRequest = new Array();
for(let i = 0; i < addvArray.length; i++) {
let addObject = addvArray[i];
let keys = new Array();
let values = new Array();
for(let key in addObject){
keys.push(key);
values.push(this.ToString(addObject[key]));
}
let op = 'INSERT';
if(ignore) op = 'INSERT OR IGNORE';
SQLRequest.push(`${op} INTO ${table} (${keys.join(', ')}) VALUES (${values.join(', ')});`);
}
SQLRequest = SQLRequest.join('\n');
try{
this.db.prepare(SQLRequest).run();
} catch(err){
if(ignore) throw new Error(`SQLEasy error: ${err.message}`);
else this.add(table, addvArray, true);
}
}
del(table, index){
this.get(table);
let equal_req = '';
for(let key in index) {
equal_req = `${key} = ${this.ToString(index[key])}`;
break;
}
let SQLRequest = `DELETE FROM ${table} WHERE ${equal_req}`;
try {
this.db.prepare(SQLRequest).run();
} catch(err) {
throw new Error(`SQLEasy error: ${err.message}`);
}
}
setItem(table, index, values){
this.getBase(table);
let equal_index = '';
let equal_values = '';
for(let key in index){
equal_index = `${key} = ${this.ToString(index[key])}`;
break;
}
for(let key in values){
equal_values = `${key} = ${this.ToString(values[key])}`;
break;
}
let SQLRequest = `UPDATE ${table} SET ${equal_values} WHERE ${equal_index}`;
try {
this.db.prepare(SQLRequest).run();
} catch(err) {
throw new Error(`SQLEasy error: ${err.message}`);
}
}
}
module.exports = {
database: database
};