wiki:DeveloperGuidelines/EdenMobile/Database

Version 1 (modified by Dominic König, 6 years ago) ( diff )

--

EdenMobile Database

$emdb Service

EdenMobile provides the $emdb service to access the database.

To use the service, it must be included in the controller dependencies:

EdenMobile.controller("MyController", [
    '$scope', '$stateParams', '$emdb',
    function($scope, $stateParams, $emdb) {
        // controller code goes here
    }
]);

$emdb automatically bootstraps the database when it is first initialized.

Default Schema

The database schema is stored in in the database itself, in the em_schema table.

For the initial setup of the database, a static emDefaultSchema (in www/js/modules/schema.js) is used:

var emSchemaVersion = '1';

var emDefaultSchema = {

    /**
     * Table to store the current schema version
     */
    'em_version': {
        'version': {
            type: 'string',
            label: 'Version',
            notnull: true
        },
        _records: [
            {'version': emSchemaVersion}
        ]
    },

    /**
     * Table to store table schemas
     */
    'em_schema': {
        'name': {
            type: 'string',
            label: 'Name',
            notnull: true
        },
        'schema': {
            type: 'json',
            label: 'Schema',
            notnull: true
        }
    }
};

Once this schema has been written to the new database, it will be ignored.

emSQL

emSQL is a helper module to construct common SQL statements. It can be found in www/js/modules/sql.js.

Examples:

// Schema definition
var schema = {
    id: {
        type: 'id'
    },
    name: {
        type: 'string',
        label: 'Name',
        notnull: true
    },
    number: {
        type: 'integer',
    },
};

// Create an emSQL helper for this schema
var table = emSQL.Table('testtable', schema);

// Produce SQL to create the table
// sql == 'CREATE IF NOT EXISTS "testtable" (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,number INTEGER)'
var sql = table.create();

// Produce SQL to insert data
// => produces a tuple: an SQL string with placeholders and an array with values (for use with db.executeSql)
// sql == ['INSERT INTO "testtable" (name,number) VALUES (?,?)', ['testing',4]]
sql = table.insert({name: 'testing', number: 4});

// Produce SQL to drop the table
// sql == 'DROP TABLE IF EXISTS "testtable"'
sql = table.drop();

Note: See TracWiki for help on using the wiki.