UNPKG

expo-sqlite-query-helper-next

Version:
262 lines (184 loc) 7.46 kB
# `expo-sqlite` Query Helper 🦮 SQLite query helper library for expo-sqlite # Installation #### Yarn `yarn add expo-sqlite-query-helper` #### NPM `npm install --save expo-sqlite-query-helper` # Usage ```javascript import { useEffect } from 'react'; import Database, { createTable, insert } from 'expo-sqlite-query-helper'; const App = () => { Database('myDatabase.db'); useEffect(() => { createTable('user', { name: 'TEXT', email: 'TEXT' }).then(({ row, rowAffected, insertID, lastQuery }) => console.log('success', row, rowAffected, insertID, lastQuery) ); insert('user', [{ name: 'Jhon', email: 'jhon@test.com' }]) .then(({ row, rowAffected, insertID, lastQuery }) => { console.log('success', row, rowAffected, insertID, lastQuery); }) .catch((e) => console.log(e)); }, []); }; ``` # API ## Initialize ```typescript import Database from "expo-sqlite-query-helper"; Database(databaseName:string, version:string); ``` `databaseName` (String) - Name of the database to create. Default is `"esqh.db"`. </br> Reference: [`expo-sql`'s `SQLite.openDatabase`](https://docs.expo.io/versions/latest/sdk/sqlite/#sqliteopendatabasename-version-description-size) ## Result object All the queries will returns an object with following keys. ### On Success `row` - WewSQLRows -`{ length:number, _array: object[] }` Mostly useful in search (Select) type query, the returned data will be inside \_array. </br> `rowAffected` - Mostly useful in update/delete queries, Returns which row is affected by the query.</br> `insertId` - Mostly useful in insert query, returns the Auto incriment ID generated by sql. `lastQuery` - The string which contains last executed query ### On Error `error` - SQLite error. </br> `lastQuery` - The string which contains last executed query ## Create Table Async function to create new table.</br> _under the hood it runs `CREATE TABLE IF NOT EXIST`_. ```javascript import { createTable } from 'expo-sqlite-query-helper'; ``` ```typescript createTable(tableName: string, columns: { [key: string]: string }); ``` `tableName` - Name of the table to create. `columns` - Column object, key is name of column, value is type & other arguments for columns (as per sqlite). Promise returns an object with `row, rowsAffected, insertId, lastQuery` ### Example ```javascript await createTable('user', { name: 'varchar(100) NOT NULL', email: 'varchar(100) NULL' }); // Creates a table with name 'user' with columns 'name' with varchar type & 'email' with varchar type ``` ## Insert Async function to run insert data into the table, Takes array of objects to insert into specified table.</br> _under the hood it runs `INSERT INTO table (...columns{keys}) values ...(columns{values});`_ ```javascript import { insert } from 'expo-sqlite-query-helper'; ``` ```typescript insert(table: string, data: InsertObject[]); ``` `tableName` - Name of the table to insert data. `data` - array of objects to insert into table.</br> example: `[{name:"test1",email:"test1@emmail.com"},{name:"test2",email:"test2@exmail.com"}]`.</br> Return promise resolving with `rowsAffected, insertId, lastQuery` ### Example ```javascript await insert('user', { name: 'test', email: 'test@tester.com' }); //Inserts a row into 'user' table with column 'name' with 'test' & 'email' with 'test@tester.com' ``` ## Search (Select) Async function to search specified parameter or select everything from the given table. </br> _under the hood it runs `SELECT * FROM tableName ?WHERE param{key}=param{value};`_ ```javascript import { search } from 'expo-sqlite-query-helper'; ``` ```typescript search ( tableName: string, param: InsertObject | null , order_by: InsertObject | null, limit: number | null , extra: string = "" ); ``` `tableName` - Name of the table to search. `param: {column:value}` - objects to search.</br> example: `{name:"test1"}`</br> `order_by : {column:"ASC"|"DESC"}` - object to order the search result. </br> example: `{id:"DESC"}` `limit` - Number of records to return.</br> `extra` - Extra SQL query if any, It will be printed just after SELECT commmand. ### Example ```javascript const result = await search('user', { name: 'test' }); // Returns rows from table 'user' where it matches column 'name' with value 'test' ``` ## Update Async function to run update data in the table, Takes an objects to update into specified table & coulumn. _under the hood it runs `UPDATE table SET (...data{keys}) values(...data{values}) WHERE where{key}=where{value};`_ ```javascript import { update } from 'expo-sqlite-query-helper'; ``` ```typescript update( tableName: string, data: InsertObject, where: { [key: string]: string } ) ``` `tableName` - Name of the table to insert data. `data` - An objects to Update into table.</br> example: `[{name:"test1",email:"test1@emmail.com"},{name:"test2",email:"test2@exmail.com"}]`.</br> `where` - Object with key as column name & value as value to search in Where clause. ### Example ```javascript await update( 'user', { name: 'test1', email: 'test1@tester.com' }, { name: 'test' } ); // Updates a row matches with column 'name' have value 'test' with column 'name' with 'test1' & column 'email' with 'test1@tester.com' ``` ## Delete Data Async function to run delete data from the table, Takes table name and object to delete perticular row. **Note:** If you pass only table name, it will delete complete data from the mentioned table _under the hood it runs `DELETE FROM table WHERE param{key}=param{value}`_ ```javascript import { deleteData } from 'expo-sqlite-query-helper'; ``` ```typescript update( tableName: string, param: { [key: string]: string }, extra: string ) ``` `tableName` - Name of the table to insert data. `param` - Object with key as column name & value. Matching row will be deleted. ### Example ```javascript await deleteData('user', { name: 'test' }); // Deletes rows matches with column 'name' have value 'test' await deleteData('user'); // Deletes all rows from 'user' table ``` ## Drop Table Async function to Drop a table from database. It takes a table name as arg. _under the hood it runs `DROP TABLE IF EXISTS table`_. ```javascript import { dropTable } from 'expo-sqlite-query-helper'; ``` ```typescript dropTable(tableName: string); ``` `tableName` - Name of the table to drop. ### Example ```javascript await dropTable('user'); // Drops table name 'user' from database. ``` ## Execute Sql Async function to run any raw string query. it takes query string & arg as arg. ```javascript import { executeSql } from 'expo-sqlite-query-helper'; ``` ```typescript executeSql(query: string, arg:string[]); ``` `query` - SQL Query string.</br> `arg` - Optional arguiment to pass to value of query. ### Example ```javascript await executeSql('SELECT * FROM user WHERE name=?', ['tester']); // Selects all rows from 'user' where column 'name' have value 'tester'. ``` --- Todo - [ ] More parameters & conditions for where clause - [ ] to add `Update if exist or Insert` function