0.1.7 • Published 3 years ago

@goori-soft/sql-base-query v0.1.7

Weekly downloads
18
License
MIT
Repository
github
Last release
3 years ago

SQL Base Query (BETA)

A simple SQL database query constructor.

Installation

To install this module using npm

npm install @goori-soft/sql-base-query

Connection

To connect to the database, start an instance with a configuration object.

const Database = require('@goori-soft/sql-base-query');
const db = new Database({
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME
});

How to use it

This module, after being instantiated, has basic functions for querying and modifying tables in a MySQL database.

The main methods of the instance are: | Method | Parameters | Description | | --- | --- | --- | | count | tableName: String, where: Object, options: Object, callback: Function | Counts the number of rows in a given table. Returns an INT value. | | create | tableName: String, fields: Object, delta: Boolean, callback: Function | Create a new table in the database. If delta is true and the table already exists, defined fields that do not yet exist will be added to the table. | | add | tableName: String, fields: Object, callback: Function | Adds new fields to an existing table. | | select | tableName: String, where: Object, options: Object, callback: Function | Executes a select query in the database on a given table. | | insert | tableName: String, values: Object, callback: Function | Executes an insert query on a given table. | | update | tableName: String, values: Object, where: Object, options: Object, callback: Function | Executes an update query on a given table. | | delete | tableName: String, where: Object, options: Object, callback: Function | Executes a delete query on a given table. |

Note: all of these methods work asynchronously and therefore return a promise.

const fields = {
    id: {type: 'number', primary: true},
    name: {type: 'string', size: 100},
    email: {type: 'string'},
    memo: {type: 'text'},
    age: {type: 'number'}
}

db.create('example', fields, true)
    .then(()=>{
        console.log('Table example has been created!');
    })
    .catch(err=>{
        console.log(err);
    })

Setting up a query

It is possible, before executing a query, to request only its assembly. To do this, use the methods in mountQuery .

mountQuery has mount methods for add, create, drop, select, insert and update queries.

const tableName = 'example';

const insert = [
    {name: 'Johnny', age: 45},
    {age: 20},
    {email: 'me@email.com', name: "O'Brian"}
];

db.mountQuery.insert(tableName, insert)
    .then(query => {
        console.log(query);
    })
    .catch(err => {
        console.log(err);
    })

Inputters e Resolvers

Inputters and Resolvers are functions that handle the input or output values ​​of SQL queries when using the insert, update or select (where) methods.

It is possible to define an inputter or resolver for each field in each table by manipulating the data before it is inserted or returned in a query. The following example shows an inputter that converts all input from object format to a string, making the process of storing complex data simpler.

Suppose the following table clients in our database: | Campo | Tipo | | --- | --- | | ID | number | | name | String | | options | String | | width | number | | hight | number |

In this case we want to store in the options field an object converted to a string (stringfy). To simplify the writing process and centralize the input data validation method, we can create an inputter for this field.

db.setInputter("clients", "options", (value) => {
    if(!value) return null;
    let input = null;
    try{
        input = JSON.stringfy(value);
    }
    catch{
        //nothing to do here!
    }
    return input
});

We can now make a direct entry of an object making sure that a validation rule will be applied to it whenever the insert or update methods are called.

let values = {
    name: "Maria",
    options: {color: "blue", size: "small"},
    width: 2,
    height: 3
}

db.insert("clients", values);

In this case, it would also be ideal to create a resolver so that the extracted value is automatically converted to an object.

db.setResolver("clients", "options", (value)=>{
    if(value == "null" || value == "NULL") return null;
    if(!value) return null;
    let resolve = null;
    try{
        resolve = JSON.parse(value);
    }
    catch{
        //nothing to do here!
    }
    return resolve;
});

db.select("clients", {name: "Maria"})
    .then((result)=>{
        console.log(result);
    });

In addition, it is possible to create a resolver to return an additional field calculated from other data in the same query line result.

db.setResolver("clients", "area", (value, row)=>{
    //value is undefined
    //because area is not a valid column
    return row.width * row.height;
});

db.select("clients", {name: "Maria"})
    .then((result)=>{
        let area = result[0].area;
        console.log(area); //shold be 6 at this point
    })

Note: in this version resolvers and inputters do not work asynchronously, that is, they cannot return a promise. This feature should be applied soon.

0.1.7

3 years ago

0.1.6

3 years ago

0.1.5

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago

0.0.13

3 years ago

0.0.14

3 years ago

0.1.0

3 years ago

0.0.12

3 years ago

0.0.11

3 years ago

0.0.10

3 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.7

3 years ago

0.0.6

3 years ago

0.0.5

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

4 years ago