{"id":25216557,"url":"https://github.com/fernandocode/ionic-database-builder","last_synced_at":"2025-10-25T15:31:42.448Z","repository":{"id":31817397,"uuid":"124251662","full_name":"fernandocode/ionic-database-builder","owner":"fernandocode","description":"Extended library from database-builder to assist in creating and maintaining SQL commands. Allowing integrate execute commands with SQLite ('@ionic-native/sqlite'), Web Sql, etc.","archived":false,"fork":false,"pushed_at":"2023-02-02T02:23:42.000Z","size":4520,"stargazers_count":3,"open_issues_count":12,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-10T15:59:47.749Z","etag":null,"topics":["angular","database-builder","extendable-library","ionic","orm","sqlite","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fernandocode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-07T14:57:34.000Z","updated_at":"2022-04-06T14:58:32.000Z","dependencies_parsed_at":"2023-02-17T13:31:04.181Z","dependency_job_id":null,"html_url":"https://github.com/fernandocode/ionic-database-builder","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fernandocode%2Fionic-database-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fernandocode%2Fionic-database-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fernandocode%2Fionic-database-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fernandocode%2Fionic-database-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fernandocode","download_url":"https://codeload.github.com/fernandocode/ionic-database-builder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238159456,"owners_count":19426453,"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":["angular","database-builder","extendable-library","ionic","orm","sqlite","typescript"],"created_at":"2025-02-10T19:18:39.702Z","updated_at":"2025-10-25T15:31:41.961Z","avatar_url":"https://github.com/fernandocode.png","language":"TypeScript","readme":"[![npm version](https://badge.fury.io/js/ionic-database-builder.svg/)](https://www.npmjs.com/package/ionic-database-builder)\n[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/fernandocode/ionic-database-builder/issues)\n\n# ionic-database-builder\nIonic module for [database-builder](https://github.com/fernandocode/database-builder) library. Allowing integrate execute commands with [SQLite ('@ionic-native/sqlite')](https://ionicframework.com/docs/native/sqlite/), [Web Sql](https://www.w3.org/TR/webdatabase/), etc. Through the interface injection 'DatabaseCreatorContract' returning an implementation of 'DatabaseObject'.\n\n# Getting Started\n\n### Step 1: Install npm module\n\n```bash\nnpm install --save ionic-database-builder \n```\nThis will install the current stable version of `ionic-database-builder` in your `node_modules` directory and save the entry in `package.json`.\n\n#### Step 1.1: If it will be used with SQLite plugin install:\n\n[Install as instructed.](https://ionicframework.com/docs/native/sqlite/)\n\n### Step 2: Add Module in App and Settings\n\n#### Simple Setup\n\n```ts\nimport { DatabaseModule, DatabaseSettingsFactoryDefault, MappersTableSimple } from 'ionic-database-builder';\nimport { DatabaseHelper } from 'database-builder';\n\n@NgModule({\n    ...\n    imports: [\n        DatabaseModule.forRoot(\n            {// settings database: name, version and mapper\n                useValue: // object to simple settings database\n                new DatabaseSettingsFactoryDefault(\n                    1, // version database \n                    \"database1\", // name database\n                    // mapper for database\n                    new MappersTableSimple(new DatabaseHelper(), {\n                    references: false, // if \"true\" generate column for serialize object reference to JSON.\n                    // Example in \"TestClazz\", create column \"testClazzRef\" to serialize \"TestClazzRef\" object\n                    referencesId: true, // if \"true\" generate column for id reference.\n                    // Example in \"TestClazz\", create column \"testClazzRef_id\" to save \"TestClazzRef\" property \"id\"\n                    referencesIdRecursive: false, // if \"true\" generate column for id reference recursive for all references inner.\n                    referencesIdColumn: \"id\" // name id column references\n                    })\n                    .mapper(\n                        false, // readonly\n                        void 0, // keyColumn: default \"id\"\n                        void 0, // default settings constructor\n                        // Type models for mapper\n                        TestClazz,\n                        TestClazzRef\n                    ))\n            },\n            {// is available database in context\n                // As SQLite is only available on the platform cordova this is used to verify this parameter\n                // useFactory: (platform: Platform) =\u003e {\n                //   return platform.is(\"cordova\");\n                // },\n                // deps: [Platform],\n                // or simply can pass true without conditions\n                useValue: true\n            },\n            {\n                // Declare the implementation of 'DatabaseCreatorContract' that you want to use, you can include a proxy, use libraries with different signatures, or create mocks for tests, etc.\n                useClass: SQLite\n            },\n            {\n                // Enable log SQL execute\n                useValue: false\n            },\n            // implementation of \"DatabaseMigrationContract\" to estrategy migration upgrade versions database\n            DatabaseMigrationService\n            ),\n        ...\n    ],\n    ...\n})\nexport class AppModule { }\n\n```\n\n**`DatabaseMigrationService`**\n\n```ts\nimport { Observable } from 'rxjs/Observable';\nimport { Injectable } from '@angular/core';\nimport { SQLiteTransaction } from '@ionic-native/sqlite';\nimport { Ddl } from 'database-builder';\nimport { DatabaseMigrationContract, Database, MappersTableBase } from 'ionic-database-builder';\nimport { Version } from 'ionic-database-builder/src/model/version-model';\n\n@Injectable()\nexport class DatabaseMigrationService extends DatabaseMigrationContract {\n\n    // implemented of \"DatabaseMigrationContract\"\n    public to(version: Version, transation: SQLiteTransaction, mappers: MappersTableBase): Observable\u003cany\u003e[] {\n        let observablesNested: Observable\u003cany\u003e[] = [];\n\n        if (version.oldVersion \u003c 2.0) {\n            observablesNested.push(this.migration_v2_0(transation, version, mappers));\n        }\n\n        return observablesNested;\n    }\n\n    private migration_v2_0(transation: SQLiteTransaction, version: Version, mappers: MappersTableBase): Observable\u003cany\u003e {\n        let observablesWait: Observable\u003cany\u003e[] = [];\n\n        let ddl = new Ddl(transation, mappers, true);\n\n        // drop tables deprecated\n        observablesWait.push(Observable.fromPromise(ddl.drop(OldModel).execute()));\n        \n        // create new tables\n        observablesWait.push(Observable.fromPromise(ddl.create(TestClazzRef).execute()));\n\n        return Observable.forkJoin(observablesWait);\n    }\n}\n```\n\n#### Advanced Setup\n\n```ts\nimport { DatabaseModule } from 'ionic-database-builder';\n\n@NgModule({\n    ...\n    imports: [\n        DatabaseModule.forRoot(\n            {// settings database: name, version and mapper\n                useClass: DatabaseSettingsFactory\n            },\n            {// is available database in context\n                // As SQLite is only available on the platform cordova this is used to verify this parameter\n                useFactory: (platform: Platform) =\u003e {\n                return platform.is(\"cordova\");\n                },\n                deps: [Platform],\n                // // or simply can pass true without conditions\n                // useValue: true\n            },\n            {\n                // Declare the implementation of 'DatabaseCreatorContract' that you want to use, you can include a proxy, use libraries with different signatures, or create mocks for tests, etc.\n                useClass: SQLite\n            },\n            {\n                // Enable log SQL execute\n                useValue: false\n            },\n            // implementation of \"DatabaseMigrationContract\" to estrategy migration upgrade versions database\n            DatabaseMigrationService\n            ),\n        ...\n    ],\n    ...\n})\nexport class AppModule { }\n\n```\n\n**`DatabaseSettingsFactory`**\n\n```ts\nimport { EnvironmentService } from './../providers/environment-service';\nimport { Injector } from '@angular/core';\nimport { DatabaseSettingsFactoryContract, MappersTableBase } from \"ionic-database-builder\";\nimport { MappersTable } from './mappers-table';\n\nexport class DatabaseSettingsFactory extends DatabaseSettingsFactoryContract {\n\n    databaseName(injector: Injector): string {\n        let environmentService: EnvironmentService = injector.get(EnvironmentService);\n        return `database_${environmentService.isProdution ? 'prod' : 'test'}`;\n    }\n\n    version(injector: Injector): number {\n        return 2.0;\n    }\n\n    mapper(injector: Injector): MappersTableBase {\n        return injector.get(MappersTable);\n    }\n\n}\n```\n\n**`MappersTable`**\n\n```ts\nimport { MappersTableSimple, DatabaseHelperService } from \"ionic-database-builder\";\nimport { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class MappersTable extends MappersTableSimple {\n\n    constructor(_databaseHelper: DatabaseHelperService) {\n        super(\n            _databaseHelper,\n            {\n                references: false,\n                referencesId: true,\n                referencesIdRecursive: false,\n                referencesIdColumn: void 0\n            }\n        );\n\n        this.mapper(false, void 0, this._defaultSettings,\n            // Type models for mapper\n            TestClazz,\n            TestClazzRef\n        );\n\n        this.add(TestClazzAdvanced, false, void 0, {\n            references: false,\n            referencesId: false,\n            referencesIdRecursive: false\n        }, metadata =\u003e {\n            metadata\n                // add column reference1_id\n                .mapper(x =\u003e x.reference1.id)\n                // add column reference1_anything\n                .mapper(x =\u003e x.reference1.anything);\n        });\n    }\n}\n```\n\n### Step 3: Use `Database` in Components\n\n`DatabaseModule` provides the injection of `Database` in its components and services, as can be seen in the following example:\n\n**`MyApp`**\n\n```ts\nimport { Database } from 'ionic-database-builder';\nimport { Component } from '@angular/core';\n\n@Component({\n  templateUrl: 'app.html'\n})\nexport class MyApp {\n\n  constructor(\n    // inject \"Database\"\n    database: Database\n  ) {\n    database.query(TestClazz).then(query =\u003e {\n      query\n        .select(x =\u003e x.description)\n        .where(where =\u003e where.equal(x =\u003e x.id, 1));\n      console.log(query.compile());\n      /**\n       * {\n       *  params: [1],\n       *  query: \"SELECT tes.description AS description FROM TestClazz AS tes WHERE tes.id \u003e ?\"\n       * }\n       */\n      // to execute in database return promise with result\n      query.toList();\n    });\n  }\n}\n```\n\n[**More documentation on database-builder (Query, Crud, etc)**](https://github.com/fernandocode/database-builder).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffernandocode%2Fionic-database-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffernandocode%2Fionic-database-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffernandocode%2Fionic-database-builder/lists"}