{"id":13614545,"url":"https://github.com/ScarletsFiction/SFDatabase-js","last_synced_at":"2025-04-13T18:33:24.590Z","repository":{"id":57357219,"uuid":"142844417","full_name":"ScarletsFiction/SFDatabase-js","owner":"ScarletsFiction","description":"An easy to use SQL or IndexedDB library for Browser and Nodejs","archived":false,"fork":false,"pushed_at":"2023-07-07T17:26:06.000Z","size":250,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-02T02:17:24.159Z","etag":null,"topics":["browser","database","indexeddb","mysqljs","nodejs","sql","websql"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ScarletsFiction.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":null,"open_collective":null,"ko_fi":"stefansarya","tidelift":null,"community_bridge":null,"liberapay":null,"otechie":null,"custom":["https://paypal.me/stefansarya"]}},"created_at":"2018-07-30T08:01:46.000Z","updated_at":"2022-06-03T23:37:27.000Z","dependencies_parsed_at":"2024-04-17T09:53:02.930Z","dependency_job_id":"90ae9a70-401b-4fdf-9593-e50e7b74c803","html_url":"https://github.com/ScarletsFiction/SFDatabase-js","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScarletsFiction%2FSFDatabase-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScarletsFiction%2FSFDatabase-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScarletsFiction%2FSFDatabase-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ScarletsFiction%2FSFDatabase-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ScarletsFiction","download_url":"https://codeload.github.com/ScarletsFiction/SFDatabase-js/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223600338,"owners_count":17171642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","database","indexeddb","mysqljs","nodejs","sql","websql"],"created_at":"2024-08-01T20:01:02.957Z","updated_at":"2024-11-07T22:31:41.491Z","avatar_url":"https://github.com/ScarletsFiction.png","language":"JavaScript","readme":"[![Software License](https://img.shields.io/badge/License-MIT-brightgreen.svg)](LICENSE)\n\n# SFDatabase-js\nSFDatabase-js is a database library that can help you build a SQL Query and execute it to the server from Nodejs or local browser with WebSQL. It will fallback to IndexedDB or LocalStorage for saving the database if running on browser. [Check the example here](https://jsbin.com/fedoyiviro/edit?js,console).\n\n## Getting started for Node.js\nFirst, you should install [mysqljs](https://github.com/mysqljs/mysql/) and `sfdatabase-js`\n```sh\n$ npm i sfdatabase-js\n\n# Optional if you want to use MySQL or SQLite for your database\n$ npm i mysqljs/mysql\n$ npm i sqlite3\n```\n\n## Sample Usage\n```js\nvar MyDB = new SFDatabase('MyDB', {\n\n    // For MySQL on Node.js\n    mysql: true,\n    host:'localhost',\n    user:'root',\n    password:'',\n\n    // For SQLite on Node.js\n    sqlite3: new (require('sqlite3').Database)('./test.db'),\n    // Your database table's structure [optional]\n    structure:{/*\n        TableName:{\n            id: ['integer', 'primary', 'autoincrement'],\n            ColumnName: 'integer',\n        },\n    */},\n\n    hideInitialization:true, // Keep silent after connected to DB\n\n    // Debug SQL query if needed\n    debug(query, data){\n        console.log(\"Query: \"+query, data);\n    },\n\n    onError: console.error,\n\n    // You can also preprocess your data before or after the SQL Query is executed\n    // This is optional\n    preprocessTable: {\n        test:{ // Table name\n            data:{ // Column name\n                set:JSON.stringify, // On insert or update\n                get:JSON.parse // On select\n            }\n        }\n    },\n\n    onInit(){\n        console.log(\"Database was connected!\");\n    }\n});\n```\n\n## Getting started for Browser\nAdd this into your HTML's header.\n```xml\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/sfdatabase-js@1.3.2/dist/SFDatabase.min.js\"\u003e\u003c/script\u003e\n```\n\nBefore you use the database, you need to create the table first.\n```js\n// Let's begin the initialization\nvar MyDB = new SFDatabase('MyDBName', {\n    // Set this to true if you want to use WebSQL\n    // Only some browser may support WebSQL\n    // Set to false if you want to use IndexedDB\n    websql: false,\n\n    // When you have changed the DBStructure you need to update this version\n    idbVersion:1,\n\n    // Your database table's structure\n    structure:{\n        // TableName:{ TableStructure },\n        UsersInfo:{\n            $user_id: ['number', 'unique'], // indexed user_id\n            $username: 'text', // indexed username\n            name: 'text',\n\n            // When using IndexedDB you can store almost any data types\n            // To improve performance and memory you shouldn't store a big Object\n            // instead you should spread it as table's structure\n            data: 'Object', // you can store like {my: 'object'}\n\n            // When using IndexedDB you can also store data without\n            // declaring the structure, but declaring the table name is a must\n        },\n        Settings:{\n            $name: ['text', 'unique'], // indexed name\n            value:'text',\n        },\n    },\n\n    // Debug WebSQL query if needed\n    debug(query, data){\n        console.log(\"Query: \"+query, data);\n    },\n\n    onInit(){\n        // MyDB_was_initialize(MyDB);\n\n        // Maybe add some feature to make something easier\n        Object.assign(MyDB, myFeature);\n        MyDB.setSettings(\"It's\", \"ready\", function(){\n            MyDB.getSettings(\"It's\", console.log)\n        });\n    }\n});\n\nvar myFeature = {\n    getSettings(name, callback){\n        //       TableName  Get Column   Where    Success Callback\n        this.get('Settings', 'value', {name:name}, function(data){\n            callback(data);\n        });\n    },\n    setSettings(name, value){\n        let that = this;\n        //       TableName      Where     Success Callback\n        this.has('Settings', {name:name}, function(exist){\n            if(exist === false)\n                that.insert('Settings', {name:name, value:value});\n                   //       TableName           Data\n            else\n                that.update('Settings', {value:value}, {name:name});\n                   //       TableName       Data           Where\n        });\n    }\n};\n```\n\n## Available Function\n\n```js\n// If you use IndexedDB you don't need .createTable\n// onSuccess and onError callback are optional\n\n// CREATE TABLE IF NOT EXISTS test (id NUMBER, name TEXT, data TEXT, words TEXT)\n// createTable(tableName, structure, onSuccess, onError);\nawait MyDB.createTable('test', {\n    id:['number', 'unique'],\n    name:'text',\n    data:'text',\n    words:'text'\n});\n\n// INSERT INTO test (id, name, words) VALUES (?, ?, ?)\n// insert(tableName, fields, onSuccess, onError);\nawait MyDB.insert(\"test\", {\n    id:1,\n    name:\"abc\",\n    words:'hey'\n});\n\n// UPDATE test\n//      SET name = ?, data = ?\n//      WHERE (id = ? AND (name = ? OR name = ?))\n// update(tableName, fields, where, onSuccess, onError);\nawait MyDB.update(\"test\", {\n    // Fields\n    name:'zxc',\n    data:{\n        any:[1,2,3]\n    }\n}, {\n    // Where\n    AND:{\n        id:1,\n        OR:{\n            name:'abc',\n            'name#1':'zxc'\n        }\n    }\n});\n\n// SELECT name, data FROM test\n//      WHERE (id = ? OR (words LIKE ?))\n//      LIMIT 1\n// select(tableName, GetFieldsData, where, onSuccess, onError);\nlet result = await MyDB.select(\"test\", ['name', 'data'], {\n    OR:{\n        id:321,\n        'words[~]':'hey'\n    },\n    LIMIT:1\n});\n\n// SELECT name FROM test\n//      WHERE (rowid = ? AND (name = ? OR name = ?) AND (id IN (?, ?, ?) OR data IS NOT NULL))\nlet results = await MyDB.select(\"test\", 'name', {\n    AND:{\n        rowid:1,\n        OR:{name:'abc', 'name#1':'zxc'},\n        'OR#1':{id:[1,2,null], 'data[!]':null}\n    }\n});\n\n// DELETE FROM test WHERE (name LIKE ?)\n// delete(tableName, where, onSuccess, onError);\nawait MyDB.delete(\"test\", {'name[~]':\"%xc\"}, console.warn);\n\n// TRUNCATE TABLE test\nawait MyDB.delete(\"test\", 0, console.warn);\n\n// Drop table\nawait MyDB.drop(\"test\", console.warn);\n```\n\n## Contribution\nIf you want to help in SFDatabase-js library, please fork this project and edit on your repository, then make a pull request to here. This library can be improved by making some code more efficient.\n\n## License\nMIT license.","funding_links":["https://ko-fi.com/stefansarya","https://paypal.me/stefansarya"],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FScarletsFiction%2FSFDatabase-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FScarletsFiction%2FSFDatabase-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FScarletsFiction%2FSFDatabase-js/lists"}