<div align="center">
  <p>
    <a href="https://www.npmjs.com/package/simplifield-sql" target="_blank"><img src="https://nodei.co/npm/simplifield-sql.png?downloads=true&downloadRank=true&stars=true"></a>
  </p>
	<p>
		<a href="https://www.npmjs.com/package/simplifield-sql"><img src="https://img.shields.io/npm/v/simplifield-sql.svg?maxAge=3600" alt="npm version" /></a>
    <a href="https://nodejs.org/" target="_blank"><img alt="node-current" src="https://img.shields.io/node/v/simplifield-sql?logo=node.js&logoColor=white"></a>
    <a href="https://discord.gg/DmddDKmygG" target="_blank"><img alt="chat-online" src="https://img.shields.io/discord/907619601943244853"></a>
		<a href="https://www.npmjs.com/package/simplifield-sql"><img src="https://img.shields.io/npm/dt/simplifield-sql.svg?maxAge=3600" alt="npm downloads" /></a>
	</p>
</div>

<br>
<br>

# About

simplifield-sql is a powerful [Node.js](https://nodejs.org) module that allows you to easily interact with the
[MySQL Database](https://dev.mysql.com/doc/).

<br>
<br>

# Installation

**Node.js 16.9.0 or newer is required.**

```sh-session
npm install simplifield-sql
yarn add simplifield-sql
```

<br>
<br>

# Example usage

Install simplifield-sql:

```sh-session
npm install simplifield-sql
yarn add simplifield-sql
```

Create new database connection:

```js
const Database = require("simplifield-sql");

const db = new Database({
  user: "root",
  host: "localhost",
  database: "myowndatabase",
  password: "mysecretshellpassword",
});

db.on("connect", (connection) => {
  console.log(`Connected to ${connection.config.database} database 👌`);
});
```

And now you're able to **insert**, **update** and **delete** the database **rows**

<br>
<br>

# Methods

### **Connection**

- **[Destroy Connection](#destroy)**
- **[Ping](#ping)**

### **Table**

- **[tables](#tables-2)**
- **[createTable](#createtabletable-rows)**
- **[deleteTable](#deletetabletable)**

### **Row**

- **[select](#selecttable-condetions)**
- **[selectAll](#selectalltable-condetions)**
- **[insert](#inserttable-values)**
- **[update](#updatetable-conditions-values)**
- **[delete](#deletetable-conditions)**

<br>
<br>

# Documents

### Connection

> ### `.destroy()`
>
> Destroys the database connection.
>
> **Returns:** `void`

> ### `.ping()`
>
> Pings the database to check the connection status.
>
> **Returns:** `number`

### **Table**

> ### `.tables()`
>
> Fetches the list of tables in the database.
>
> **Returns:** `Table[]`

> ### `.createTable(table, rows)`
>
> Creates a new table in the database.
>
> | PARAMETER |      TYPE       |    DESCRIPTION     |
> | :-------: | :-------------: | :----------------: |
> |   table   |     string      | The new table name |
> |   rows    | [Row](#row-2)[] | The new table rows |
>
> **Returns:** `{ table: string, rows: `[Row](#row-2)`[] }[]`

> ### `.deleteTable(table)`
>
> Drops a table from the database.
>
> | PARAMETER |  TYPE  |     DESCRIPTION      |
> | :-------: | :----: | :------------------: |
> |   table   | string | The MySQL table name |
>
> **Returns:** `boolean`

### **Row**

> ### `.select(table, condetions)`
>
> Retrieves data from a specific table with given conditions.
>
> | PARAMETER  |  TYPE  |            DESCRIPTION            |
> | :--------: | :----: | :-------------------------------: |
> |   table    | string |          The MySQL table          |
> | conditions | object | The conditions for data retrieval |
>
> **Returns:** `Data?`

> ### `.selectAll(table, condetions)`
>
> Retrieves all data from a specific table with given conditions.
>
> | PARAMETER  |  TYPE  |            DESCRIPTION            |
> | :--------: | :----: | :-------------------------------: |
> |   table    | string |          The MySQL table          |
> | conditions | object | The conditions for data retrieval |
>
> **Returns:** `Data[]`

> ### `.insert(table, values)`
>
> Inserts new data into a specific table.
>
> | PARAMETER |  TYPE  |        DESCRIPTION        |
> | :-------: | :----: | :-----------------------: |
> |   table   | string |      The MySQL table      |
> |  values   | object | The values to be inserted |
>
> **Returns:** `Data`

> ### `.update(table, conditions, values)`
>
> Updates existing data in a specific table.
>
> | PARAMETER  |  TYPE  |          DESCRIPTION           |
> | :--------: | :----: | :----------------------------: |
> |   table    | string |        The MySQL table         |
> | conditions | object | The conditions for data update |
> |   values   | object |         The new values         |
>
> **Returns:** `Data`

> ### `.delete(table, conditions)`
>
> Deletes data from a specific table based on given conditions.
>
> | PARAMETER  |  TYPE  |           DESCRIPTION            |
> | :--------: | :----: | :------------------------------: |
> |   table    | string |         The MySQL table          |
> | conditions | object | The conditions for data deletion |
>
> **Returns:** `boolean`

<br>
<br>

# **Types**

> ## Row
>
> Represents a database row configuration.
>
> | Property      | Type               | Optional | Description                    |
> | :------------ | :----------------- | :------- | :----------------------------- |
> | name          | string             | ✖        | Column name                    |
> | dataType      | MySQLDataType      | ✖        | Data type                      |
> | dataLength    | number             | ✔        | Length of data (if applicable) |
> | characterSet  | MySQLCharacterSet  | ✔        | Character set (if applicable)  |
> | collation     | MySQLCollation     | ✔        | Collation (if applicable)      |
> | allowNull     | boolean            | ✔        | Is NULL allowed                |
> | defaultValue  | string &#124; null | ✔        | Default value (if applicable)  |
> | primaryKey    | boolean            | ✔        | Is primary key                 |
> | autoIncrement | boolean            | ✔        | Is auto-incrementing           |
> | unique        | boolean            | ✔        | Is unique constraint           |

> ## MySQL Data Types
>
> ### `MySQLDataType`
>
> Represents various MySQL data types.
>
> - `INT`
> - `BIGINT`
> - `FLOAT`
> - `DOUBLE`
> - `DECIMAL`
> - `CHAR`
> - `VARCHAR`
> - `TEXT`
> - `DATE`
> - `TIME`
> - `DATETIME`
> - `TIMESTAMP`
> - `YEAR`
> - `BOOLEAN`
> - `TINYINT`
> - `SMALLINT`
> - `MEDIUMINT`
> - `ENUM`
> - `SET`
> - `BINARY`
> - `VARBINARY`
> - `BLOB`
> - `JSON`
> - `JSONB`
> - `GEOMETRY`

> ## MySQL Character Sets
>
> ### `MySQLCharacterSet`
>
> Represents various MySQL character sets.
>
> - `big5`
> - `dec8`
> - `cp850`
> - `hp8`
> - `koi8r`
> - `latin1`
> - `latin2`
> - `swe7`
> - `ascii`
> - `ujis`
> - `sjis`
> - `hebrew`
> - `tis620`
> - `euckr`
> - `koi8u`
> - `gb2312`
> - `greek`
> - `cp1250`
> - `gbk`
> - `latin5`
> - `armscii8`
> - `utf8`
> - `ucs2`
> - `cp866`
> - `keybcs2`
> - `macce`
> - `macroman`
> - `cp852`
> - `latin7`
> - `utf8mb4`
> - `cp1251`
> - `utf16`
> - `utf16le`
> - `cp1256`
> - `cp1257`
> - `utf32`
> - `binary`
> - `geostd8`
> - `cp932`
> - `eucjpms`

> ## MySQL Collations
>
> ### `MySQLCollation`
>
> Represents various MySQL collations.
>
> - `big5_chinese_ci`
> - `big5_bin`
> - `dec8_swedish_ci`
> - `dec8_bin`
> - `cp850_general_ci`
> - `cp850_bin`
> - `hp8_english_ci`
> - `hp8_bin`
> - `koi8r_general_ci`
> - `koi8r_bin`
> - `latin1_german1_ci`
> - `latin1_swedish_ci`
> - `latin1_danish_ci`
> - `latin1_german2_ci`
> - `latin1_bin`
> - `latin1_general_ci`
> - `latin1_general_cs`
> - `latin1_spanish_ci`
> - `latin2_czech_cs`
> - `latin2_general_ci`
> - `latin2_hungarian_ci`
> - `latin2_croatian_ci`
> - `latin2_bin`
> - `swe7_swedish_ci`
> - `swe7_bin`
> - `ascii_general_ci`
> - `ascii_bin`
> - `ujis_japanese_ci`
> - `ujis_bin`
> - `sjis_japanese_ci`
> - `sjis_bin`
> - `hebrew_general_ci`
> - `hebrew_bin`
> - `tis620_thai_ci`
> - `tis620_bin`
> - `euckr_korean_ci`
> - `euckr_bin`
> - `koi8u_general_ci`
> - `koi8u_bin`
> - `gb2312_chinese_ci`
> - `gb2312_bin`
> - `greek_general_ci`
> - `greek_bin`
> - `cp1250_general_ci`
> - `cp1250_czech_cs`
> - `cp1250_croatian_ci`
> - `cp1250_bin`
> - `gbk_chinese_ci`
> - `gbk_bin`
> - `latin5_turkish_ci`
> - `latin5_bin`
> - `armscii8_general_ci`
> - `armscii8_bin`
> - `utf8_general_ci`
> - `utf8_bin`
> - `utf8_unicode_ci`
> - `utf8_icelandic_ci`
> - `utf8_latvian_ci`
> - `utf8_romanian_ci`
> - `utf8_slovenian_ci`
> - `utf8_polish_ci`
> - `utf8_estonian_ci`
> - `utf8_spanish_ci`
> - `utf8_swedish_ci`
> - `utf8_turkish_ci`
> - `utf8_czech_ci`
> - `utf8_danish_ci`
> - `utf8_lithuanian_ci`
> - `utf8_slovak_ci`
> - `utf8_spanish2_ci`
> - `utf8_roman_ci`
> - `utf8_persian_ci`
> - `utf8_esperanto_ci`
> - `utf8_hungarian_ci`
> - `utf8_sinhala_ci`
> - `utf8_german2_ci`
> - `utf8_croatian_ci`
> - `utf8_unicode_520_ci`
> - `utf8_vietnamese_ci`
> - `utf8_general_mysql500_ci`
> - `ucs2_general_ci`
> - `ucs2_bin`
> - `ucs2_unicode_ci`
> - `ucs2_icelandic_ci`
> - `ucs2_latvian_ci`
> - `ucs2_romanian_ci`
> - `ucs2_slovenian_ci`
> - `ucs2_polish_ci`
> - `ucs2_estonian_ci`
> - `ucs2_spanish_ci`
> - `ucs2_swedish_ci`
> - `ucs2_turkish_ci`
> - `ucs2_czech_ci`
> - `ucs2_danish_ci`
> - `ucs2_lithuanian_ci`
> - `ucs2_slovak_ci`
> - `ucs2_spanish2_ci`
> - `ucs2_roman_ci`
> - `ucs2_persian_ci`
> - `ucs2_esperanto_ci`
> - `ucs2_hungarian_ci`
> - `ucs2_sinhala_ci`
> - `ucs2_german2_ci`
> - `ucs2_croatian_ci`
> - `ucs2_unicode_520_ci`
> - `ucs2_vietnamese_ci`
> - `ucs2_general_mysql500_ci`
> - `cp866_general_ci`
> - `cp866_bin`
> - `keybcs2_general_ci`
> - `keybcs2_bin`
> - `macce_general_ci`
> - `macce_bin`
> - `macroman_general_ci`
> - `macroman_bin`
> - `cp852_general_ci`
> - `cp852_bin`
> - `latin7_estonian_cs`
> - `latin7_general_ci`
> - `latin7_general_cs`
> - `latin7_bin`
> - `utf8mb4_general_ci`
> - `utf8mb4_bin`
> - `utf8mb4_unicode_ci`
> - `utf8mb4_icelandic_ci`
> - `utf8mb4_latvian_ci`
> - `utf8mb4_romanian_ci`
> - `utf8mb4_slovenian_ci`
> - `utf8mb4_polish_ci`
> - `utf8mb4_estonian_ci`
> - `utf8mb4_spanish_ci`
> - `utf8mb4_swedish_ci`
> - `utf8mb4_turkish_ci`
> - `utf8mb4_czech_ci`
> - `utf8mb4_danish_ci`
> - `utf8mb4_lithuanian_ci`
> - `utf8mb4_slovak_ci`
> - `utf8mb4_spanish2_ci`
> - `utf8mb4_roman_ci`
> - `utf8mb4_persian_ci`
> - `utf8mb4_esperanto_ci`
> - `utf8mb4_hungarian_ci`
> - `utf8mb4_sinhala_ci`
> - `utf8mb4_german2_ci`
> - `utf8mb4_croatian_ci`
> - `utf8mb4_unicode_520_ci`
> - `utf8mb4_vietnamese_ci`
> - `ucs2mb4_general_ci`
> - `ucs2mb4_bin`
> - `ucs2mb4_unicode_ci`
> - `ucs2mb4_icelandic_ci`
> - `ucs2mb4_latvian_ci`
> - `ucs2mb4_romanian_ci`
> - `ucs2mb4_slovenian_ci`
> - `ucs2mb4_polish_ci`
> - `ucs2mb4_estonian_ci`
> - `ucs2mb4_spanish_ci`
> - `ucs2mb4_swedish_ci`
> - `ucs2mb4_turkish_ci`
> - `ucs2mb4_czech_ci`
> - `ucs2mb4_danish_ci`
> - `ucs2mb4_lithuanian_ci`
> - `ucs2mb4_slovak_ci`
> - `ucs2mb4_spanish2_ci`
> - `ucs2mb4_roman_ci`
> - `ucs2mb4_persian_ci`
> - `ucs2mb4_esperanto_ci`
> - `ucs2mb4_hungarian_ci`
> - `ucs2mb4_sinhala_ci`
> - `ucs2mb4_german2_ci`
> - `ucs2mb4_croatian_ci`
> - `ucs2mb4_unicode_520_ci`
> - `ucs2mb4_vietnamese_ci`
> - `cp1251_bulgarian_ci`
> - `cp1251_ukrainian_ci`
> - `cp1251_bin`
> - `cp1251_general_ci`
> - `cp1251_general_cs`
> - `cp1251_general_mysql500_ci`
> - `utf16_general_ci`
> - `utf16_bin`
> - `utf16_unicode_ci`
> - `utf16_icelandic_ci`
> - `utf16_latvian_ci`
> - `utf16_romanian_ci`
> - `utf16_slovenian_ci`
> - `utf16_polish_ci`
> - `utf16_estonian_ci`
> - `utf16_spanish_ci`
> - `utf16_swedish_ci`
> - `utf16_turkish_ci`
> - `utf16_czech_ci`
> - `utf16_danish_ci`
> - `utf16_lithuanian_ci`
> - `utf16_slovak_ci`
> - `utf16_spanish2_ci`
> - `utf16_roman_ci`
> - `utf16_persian_ci`
> - `utf16_esperanto_ci`
> - `utf16_hungarian_ci`
> - `utf16_sinhala_ci`
> - `utf16_german2_ci`
> - `utf16_croatian_ci`
> - `utf16_unicode_520_ci`
> - `utf16_vietnamese_ci`
> - `utf16le_general_ci`
> - `utf16le_bin`
> - `cp1256_general_ci`
> - `cp1256_bin`
> - `cp1257_lithuanian_ci`
> - `cp1257_bin`
> - `utf32_general_ci`
> - `utf32_bin`
> - `utf32_unicode_ci`
> - `utf32_icelandic_ci`
> - `utf32_latvian_ci`
> - `utf32_romanian_ci`
> - `utf32_slovenian_ci`
> - `utf32_polish_ci`
> - `utf32_estonian_ci`
> - `utf32_spanish_ci`
> - `utf32_swedish_ci`
> - `utf32_turkish_ci`
> - `utf32_czech_ci`
> - `utf32_danish_ci`
> - `utf32_lithuanian_ci`
> - `utf32_slovak_ci`
> - `utf32_spanish2_ci`
> - `utf32_roman_ci`
> - `utf32_persian_ci`
> - `utf32_esperanto_ci`
> - `utf32_hungarian_ci`
> - `utf32_sinhala_ci`
> - `utf32_german2_ci`
> - `utf32_croatian_ci`
> - `utf32_unicode_520_ci`
> - `utf32_vietnamese_ci`
> - `binary`
> - `armscii8_general_ci`
> - `armscii8_bin`
> - `ascii_general_ci`
> - `ascii_bin`
> - `cp1250_general_ci`
> - `cp1250_czech_cs`
> - `cp1250_croatian_ci`
> - `cp1250_bin`
> - `cp1250_polish_ci`
> - `cp1251_bulgarian_ci`
> - `cp1251_ukrainian_ci`
> - `cp1251_bin`
> - `cp1251_general_ci`
> - `cp1251_general_cs`
> - `cp1251_general_mysql500_ci`
> - `cp1251_croatian_ci`
> - `cp1251_polish_ci`
> - `cp1251_serbian_ci`
> - `cp1251_macedonian_ci`
> - `cp1251_general_cs`
> - `cp1251_general_mysql500_ci`
> - `cp1251_croatian_ci`
> - `cp1251_polish_ci`
> - `cp1251_serbian_ci`
> - `cp1251_macedonian_ci`
> - `cp1256_general_ci`
> - `cp1256_bin`
> - `cp1257_lithuanian_ci`
> - `cp1257_bin`
> - `cp850_general_ci`
> - `cp850_bin`
> - `cp852_general_ci`
> - `cp852_bin`
> - `cp866_general_ci`
> - `cp866_bin`
> - `cp932_japanese_ci`
> - `cp932_bin`
> - `dec8_swedish_ci`
> - `dec8_bin`
> - `euckr_korean_ci`
> - `euckr_bin`
> - `gb2312_chinese_ci`
> - `gb2312_bin`
> - `gbk_chinese_ci`
> - `gbk_bin`
> - `geostd8_general_ci`
> - `geostd8_bin`
> - `greek_general_ci`
> - `greek_bin`
> - `hebrew_general_ci`
> - `hebrew_bin`
> - `hp8_english_ci`
> - `hp8_bin`
> - `keybcs2_general_ci`
> - `keybcs2_bin`
> - `koi8r_general_ci`
> - `koi8r_bin`
> - `koi8u_general_ci`
> - `koi8u_bin`
> - `latin1_german1_ci`
> - `latin1_swedish_ci`
> - `latin1_danish_ci`
> - `latin1_german2_ci`
> - `latin1_bin`
> - `latin1_general_ci`
> - `latin1_general_cs`
> - `latin1_spanish_ci`
> - `latin2_czech_cs`
> - `latin2_general_ci`
> - `latin2_hungarian_ci`
> - `latin2_croatian_ci`
> - `latin2_bin`
> - `latin5_turkish_ci`
> - `latin5_bin`
> - `latin7_estonian_cs`
> - `latin7_general_ci`
> - `latin7_general_cs`
> - `latin7_bin`
> - `macce_general_ci`
> - `macce_bin`
> - `macroman_general_ci`
> - `macroman_bin`
> - `sjis_japanese_ci`
> - `sjis_bin`
> - `swe7_swedish_ci`
> - `swe7_bin`
> - `tis620_thai_ci`
> - `tis620_bin`
> - `ucs2_general_ci`
> - `ucs2_bin`
> - `ucs2_unicode_ci`
> - `ucs2_icelandic_ci`
> - `ucs2_latvian_ci`
> - `ucs2_romanian_ci`
> - `ucs2_slovenian_ci`
> - `ucs2_polish_ci`
> - `ucs2_estonian_ci`
> - `ucs2_spanish_ci`
> - `ucs2_swedish_ci`
> - `ucs2_turkish_ci`
> - `ucs2_czech_ci`
> - `ucs2_danish_ci`
> - `ucs2_lithuanian_ci`
> - `ucs2_slovak_ci`
> - `ucs2_spanish2_ci`
> - `ucs2_roman_ci`
> - `ucs2_persian_ci`
> - `ucs2_esperanto_ci`
> - `ucs2_hungarian_ci`
> - `ucs2_sinhala_ci`
> - `ucs2_german2_ci`
> - `ucs2_croatian_ci`
> - `ucs2_unicode_520_ci`
> - `ucs2_vietnamese_ci`
> - `ujis_japanese_ci`
> - `ujis_bin`
> - `utf16_general_ci`
> - `utf16_bin`
> - `utf16_unicode_ci`
> - `utf16_icelandic_ci`
> - `utf16_latvian_ci`
> - `utf16_romanian_ci`
> - `utf16_slovenian_ci`
> - `utf16_polish_ci`
> - `utf16_estonian_ci`
> - `utf16_spanish_ci`
> - `utf16_swedish_ci`
> - `utf16_turkish_ci`
> - `utf16_czech_ci`
> - `utf16_danish_ci`
> - `utf16_lithuanian_ci`
> - `utf16_slovak_ci`
> - `utf16_spanish2_ci`
> - `utf16_roman_ci`
> - `utf16_persian_ci`
> - `utf16_esperanto_ci`
> - `utf16_hungarian_ci`
> - `utf16_sinhala_ci`
> - `utf16_german2_ci`
> - `utf16_croatian_ci`
> - `utf16_unicode_520_ci`
> - `utf16_vietnamese_ci`
> - `utf16le_general_ci`
> - `utf16le_bin`
> - `utf32_general_ci`
> - `utf32_bin`
> - `utf32_unicode_ci`
> - `utf32_icelandic_ci`
> - `utf32_latvian_ci`
> - `utf32_romanian_ci`
> - `utf32_slovenian_ci`
> - `utf32_polish_ci`
> - `utf32_estonian_ci`
> - `utf32_spanish_ci`
> - `utf32_swedish_ci`
> - `utf32_turkish_ci`
> - `utf32_czech_ci`
> - `utf32_danish_ci`
> - `utf32_lithuanian_ci`
> - `utf32_slovak_ci`
> - `utf32_spanish2_ci`
> - `utf32_roman_ci`
> - `utf32_persian_ci`
> - `utf32_esperanto_ci`
> - `utf32_hungarian_ci`
> - `utf32_sinhala_ci`
> - `utf32_german2_ci`
> - `utf32_croatian_ci`
> - `utf32_unicode_520_ci`
> - `utf32_vietnamese_ci`

> ## MySQL Default Values
>
> ### `MySQLDefaultValue`
>
> Represents possible default values for MySQL columns.
>
> - `NONE`
> - `NULL`
> - `CURRENT_TIMESTAMP`

# Solved Bugs 🐛

- ### **_✔_** &nbsp; The db wasn't accept the string characters `` (', ", `) ``
- ### **_✔_** &nbsp; When you delete a row you will got an error
- ### **_✔_** &nbsp; deleteAll doesn't work
