View All Posts. MiCHiLU.com powered by Django ;-)

ECMAScript]: Google Gears + GearsORM

JavaScript の ORM があった。 (Versoin UPしてたのと使い方が間違ってたので書き直し at 2007-08-27)

Firebug Console

>>> GearsFactory
function()
>>> factory = new GearsFactory();
GearsFactory
>>> window.google = {};
Object
>>> google.gears = {factory: factory};
Object factory=GearsFactory
// ここまで gears_init.js 相当


// Factory API
>>> google.gears.factory.getBuildInfo();
"0.1.54.0;official;opt;firefox"

>>> google.gears.factory.create('beta.database', '1.0');
GearsDatabase
>>> google.gears.factory.create('beta.localserver', '1.0');
GearsLocalServer
>>> google.gears.factory.create('beta.workerpool', '1.0');
GearsWorkerPool


// Database Module API
>>> var db = google.gears.factory.create('beta.database', '1.0');

>>> db.open()
>>> db.lastInsertRowId
0
>>> db.close()
>>> db.lastInsertRowId
>>> db.open("name_option")
>>> db.lastInsertRowId
0
>>> db.open()
>>> db.lastInsertRowId
0
>>> db.close()
>>> db.lastInsertRowId
>>> db.open("日本語")
>>> db.lastInsertRowId
>>> db.open('/\*?"<>|:;,.¥');
>>> db.lastInsertRowId
>>> db.open("!#$%&()=~@`[]{}+");
>>> db.lastInsertRowId
0
>>> db.close();


// GearsORM
>>> (function () {
        var head_elem = document.getElementsByTagName('head').item(0);
        var script = document.createElement('script');
        script.src = 'http://www.urielkatz.com/projects/GearsOrm/GearsORM_Packed_0.2.js';
        script.type = 'text/javascript';
        head_elem.appendChild(script);
    })();
>>> GearsORM;
Object _models=Object dbName=gears.orm debug=true


>>> (new GearsORM.Fields.String).isBackwardRelation;
false
>>> (new GearsORM.Fields.String).isRelation;
false
>>> (new GearsORM.Fields.String({maxLength:25, notNull:true, defaultValue:1, unique:true})).options;
Object maxLength=25 notNull=true defaultValue=1 unique=true
>>> (new GearsORM.Fields.String({maxLength:25, notNull:true, defaultValue:1, unique:true})).toSql();
"VARCHAR(25) NOT NULL DEFAULT 1 UNIQUE "
>>> (new GearsORM.Fields.String({maxLength:25, notNull:false, defaultValue:1, unique:false})).toSql();
"VARCHAR(25) DEFAULT 1 "
>>> (new GearsORM.Fields.Integer).toSql();
"INTEGER"
>>> (new GearsORM.Fields.Float).toSql();
"REAL"
>>> (new GearsORM.Fields.TimeStamp).toSql();
"TIMESTAMP"


>>> var Entry = new GearsORM.Model({
        name:"Entry",
        fields:{
            content:new GearsORM.Fields.String({maxLength:10}),
            tags:new GearsORM.Fields.ManyToMany({related:"Tag"})
        }
    });
>>> Entry.options.fields.tags.isBackwardRelation
true
>>> var Tag = new GearsORM.Model({
        name:"Tag",
        fields:{
            name:new GearsORM.Fields.String({maxLength:10}),
            entries:new GearsORM.Fields.ManyToMany({related:"Entry"})
        }
    });
>>> Tag.options.fields.entries.isBackwardRelation
true

Google Gears for Firefox/127.0.0.1/http_8000

$ ll gears.orm\#database*
-rw-------   1 endoh  endoh  0B  8 27 22:44 gears.orm#database

Firebug Console

>>> Entry.createTable()
BEGIN undefined
CREATE TABLE IF NOT EXISTS Entry(content VARCHAR(10) ) undefined
CREATE TABLE IF NOT EXISTS m2m_Entry_Tag(Tag_id INTEGER NOT NULL CONSTRAINT fk_Tag_id REFERENCES Tag(rowid),Entry_id INTEGER NOT NULL CONSTRAINT fk_Entry_id REFERENCES Entry(rowid)) undefined
SELECT COUNT(*) FROM sqlite_master WHERE sqlite_master.type =? AND sqlite_master.name IN (?,?) ["table", "Tag", "Entry"]
COMMIT undefined

>>> Tag.createTable()
BEGIN undefined
CREATE TABLE IF NOT EXISTS Tag(name VARCHAR(10) ) undefined
CREATE TABLE IF NOT EXISTS m2m_Entry_Tag(Tag_id INTEGER NOT NULL CONSTRAINT fk_Tag_id REFERENCES Tag(rowid),Entry_id INTEGER NOT NULL CONSTRAINT fk_Entry_id REFERENCES Entry(rowid)) undefined
SELECT COUNT(*) FROM sqlite_master WHERE sqlite_master.type =? AND sqlite_master.name IN (?,?) ["table", "Tag", "Entry"]
CREATE TRIGGER IF NOT EXISTS fki_m2m_Entry_Tag_Tag_rowid BEFORE INSERT ON m2m_Entry_Tag FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'insert on table "m2m_Entry_Tag" violates foreign key constraint "fk_Tag_rowid"') WHERE (SELECT rowid FROM Tag WHERE rowid = NEW.Tag_id) IS NULL; END; undefined
CREATE TRIGGER IF NOT EXISTS fku_m2m_Entry_Tag_Tag_rowid BEFORE UPDATE ON m2m_Entry_Tag FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'update on table "m2m_Entry_Tag" violates foreign key constraint "fk_Tag_rowid"') WHERE (SELECT rowid FROM Tag WHERE rowid = NEW.Tag_id) IS NULL; END; undefined
CREATE TRIGGER IF NOT EXISTS fkd_m2m_Entry_Tag_Tag_rowid BEFORE DELETE ON Tag FOR EACH ROW BEGIN DELETE from m2m_Entry_Tag WHERE Tag_id = OLD.rowid; END; undefined
CREATE TRIGGER IF NOT EXISTS fki_m2m_Entry_Tag_Entry_rowid BEFORE INSERT ON m2m_Entry_Tag FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'insert on table "m2m_Entry_Tag" violates foreign key constraint "fk_Entry_rowid"') WHERE (SELECT rowid FROM Entry WHERE rowid = NEW.Entry_id) IS NULL; END; undefined
CREATE TRIGGER IF NOT EXISTS fku_m2m_Entry_Tag_Entry_rowid BEFORE UPDATE ON m2m_Entry_Tag FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'update on table "m2m_Entry_Tag" violates foreign key constraint "fk_Entry_rowid"') WHERE (SELECT rowid FROM Entry WHERE rowid = NEW.Entry_id) IS NULL; END; undefined
CREATE TRIGGER IF NOT EXISTS fkd_m2m_Entry_Tag_Entry_rowid BEFORE DELETE ON Entry FOR EACH ROW BEGIN DELETE from m2m_Entry_Tag WHERE Entry_id = OLD.rowid; END; undefined
COMMIT undefined

Google Gears for Firefox/127.0.0.1/http_8000

$ ll gears.orm\#database*
-rw-------   1 endoh  endoh    20K  8 27 22:49 gears.orm#database
$ sqlite3 gears.orm\#database .dump
BEGIN TRANSACTION;
CREATE TABLE Entry(content VARCHAR(10) );
CREATE TABLE m2m_Entry_Tag(Tag_id INTEGER NOT NULL CONSTRAINT fk_Tag_id REFERENCES Tag(rowid),Entry_id INTEGER NOT NULL CONSTRAINT fk_Entry_id REFERENCES Entry(rowid));
CREATE TABLE Tag(name VARCHAR(10) );
CREATE TRIGGER fki_m2m_Entry_Tag_Tag_rowid BEFORE INSERT ON m2m_Entry_Tag FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'insert on table "m2m_Entry_Tag" violates foreign key constraint "fk_Tag_rowid"') WHERE (SELECT rowid FROM Tag WHERE rowid = NEW.Tag_id) IS NULL; END;
CREATE TRIGGER fku_m2m_Entry_Tag_Tag_rowid BEFORE UPDATE ON m2m_Entry_Tag FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'update on table "m2m_Entry_Tag" violates foreign key constraint "fk_Tag_rowid"') WHERE (SELECT rowid FROM Tag WHERE rowid = NEW.Tag_id) IS NULL; END;
CREATE TRIGGER fkd_m2m_Entry_Tag_Tag_rowid BEFORE DELETE ON Tag FOR EACH ROW BEGIN DELETE from m2m_Entry_Tag WHERE Tag_id = OLD.rowid; END;
CREATE TRIGGER fki_m2m_Entry_Tag_Entry_rowid BEFORE INSERT ON m2m_Entry_Tag FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'insert on table "m2m_Entry_Tag" violates foreign key constraint "fk_Entry_rowid"') WHERE (SELECT rowid FROM Entry WHERE rowid = NEW.Entry_id) IS NULL; END;
CREATE TRIGGER fku_m2m_Entry_Tag_Entry_rowid BEFORE UPDATE ON m2m_Entry_Tag FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'update on table "m2m_Entry_Tag" violates foreign key constraint "fk_Entry_rowid"') WHERE (SELECT rowid FROM Entry WHERE rowid = NEW.Entry_id) IS NULL; END;
CREATE TRIGGER fkd_m2m_Entry_Tag_Entry_rowid BEFORE DELETE ON Entry FOR EACH ROW BEGIN DELETE from m2m_Entry_Tag WHERE Entry_id = OLD.rowid; END;
COMMIT;

Firebug Console

>>> Entry.select()
["SELECT Entry.rowid,Entry.content FROM Entry", undefined]
Object result=GearsResultSet first=true
>>> Tag.select().result.fieldCount()
["SELECT Tag.rowid,Tag.name FROM Tag", undefined]
2

>>> Tag.count();
SELECT COUNT(*) FROM Tag undefined
0
>>> var tag = new Tag({name:"egg"}).save();
INSERT INTO Tag (name) VALUES (?) ["egg"]
>>> Tag.count();
SELECT COUNT(*) FROM Tag undefined
1
>>> tag
Object name=egg entries=Object rowid=1

>>> var entry = new Entry();
>>> entry.content = "content";
"content"
>>> entry.save();
INSERT INTO Entry (content) VALUES (?) ["content"]
Object tags=Object content=content rowid=1
>>> entry.tags.add(tag);
INSERT INTO m2m_Entry_Tag (Tag_id,Entry_id) VALUES (?,?) [1, 1]
Object Entry=Object Tag=Object rowid=1

>>> Entry.select().getOne().tags.select().getOne();
SELECT Entry.rowid,Entry.content FROM Entry undefined
SELECT DISTINCT Tag.rowid,Tag.name FROM Tag JOIN m2m_Entry_Tag ON m2m_Entry_Tag.Tag_id = Tag.rowid AND m2m_Entry_Tag.Entry_id =1 undefined
Object entries=Object rowid=1 name=egg
>>> Tag.select().getOne().entries.select().getOne();
SELECT Tag.rowid,Tag.name FROM Tag undefined
SELECT DISTINCT Entry.rowid,Entry.content FROM Entry JOIN m2m_Entry_Tag ON m2m_Entry_Tag.Entry_id = Entry.rowid AND m2m_Entry_Tag.Tag_id =1 undefined
Object tags=Object rowid=1 content=content

>>> Entry.select().each(function(entry){alert(entry.tags.select().getOne().name)});
SELECT Entry.rowid,Entry.content FROM Entry undefined
SELECT DISTINCT Tag.rowid,Tag.name FROM Tag JOIN m2m_Entry_Tag ON m2m_Entry_Tag.Tag_id = Tag.rowid AND m2m_Entry_Tag.Entry_id =1
// alert("egg");
>>> Tag.select().each(function(tag){alert(tag.entries.select().toArray().length)});
SELECT Tag.rowid,Tag.name FROM Tag undefined
SELECT DISTINCT Entry.rowid,Entry.content FROM Entry JOIN m2m_Entry_Tag ON m2m_Entry_Tag.Entry_id = Entry.rowid AND m2m_Entry_Tag.Tag_id =1 undefined
// alert(1)


>>> GearsORM.Sql._createDeleteCascadeOrRestrictTrigger()
"CREATE TRIGGER IF NOT EXISTS fkd___rowid BEFORE DELETE ON FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'delete on table "" violates foreign key constraint "fk___id"')WHERE (SELECT _id FROM WHERE _id = OLD.rowid) IS NOT NULL; END;"
>>> GearsORM.Sql._createInsertUpdateForigenKeyTrigger()
"CREATE TRIGGER IF NOT EXISTS fki___rowid BEFORE INSERT ON FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'insert on table "" violates foreign key constraint "fk__rowid"') WHERE (SELECT rowid FROM WHERE rowid = NEW._id) IS NULL; END;"
>>> GearsORM.Sql._dropForigenKeyTrigger()
"DROP TRIGGER IF EXISTS fk___rowid"
>>> GearsORM.Sql._fieldsValue()
>>> GearsORM.Sql._filedsByModel()
>>> GearsORM.Sql._m2mJoins()
" JOIN ON ._id = .rowid AND ._id ="
>>> GearsORM.Sql._selectFields()
>>> GearsORM.Sql._selectJoins()
>>> GearsORM.Sql._valuesByModel()
>>> GearsORM.Sql.createDeleteCascadeTrigger()
"CREATE TRIGGER IF NOT EXISTS fkd___rowid BEFORE DELETE ON FOR EACH ROW BEGIN DELETE from WHERE _id = OLD.rowid; END;"
>>> GearsORM.Sql.createDeleteRestrictTrigger()
"CREATE TRIGGER IF NOT EXISTS fkd___rowid BEFORE DELETE ON FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'delete on table "" violates foreign key constraint "fk___id"')WHERE (SELECT _id FROM WHERE _id = OLD.rowid) IS NOT NULL; END;"
>>> GearsORM.Sql.createInsertForigenKeyTrigger()
"CREATE TRIGGER IF NOT EXISTS fki___rowid BEFORE INSERT ON FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'insert on table "" violates foreign key constraint "fk__rowid"') WHERE (SELECT rowid FROM WHERE rowid = NEW._id) IS NULL; END;"
>>> GearsORM.Sql.createTableByModelClass()
>>> GearsORM.Sql.createUpdateForigenKeyTrigger()
"CREATE TRIGGER IF NOT EXISTS fku___rowid BEFORE UPDATE ON FOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'update on table "" violates foreign key constraint "fk__rowid"') WHERE (SELECT rowid FROM WHERE rowid = NEW._id) IS NULL; END;"
>>> GearsORM.Sql.deleteFromTableWhere()
"DELETE FROM WHERE "
>>> GearsORM.Sql.deleteRowByIdAndTable()
"DELETE FROM WHERE rowid = ?"
>>> GearsORM.Sql.dropForigenKeyDeleteTrigger()
"DROP TRIGGER IF EXISTS fkd___rowid"
>>> GearsORM.Sql.dropForigenKeyInsertTrigger()
"DROP TRIGGER IF EXISTS fki___rowid"
>>> GearsORM.Sql.dropForigenKeyUpdateTrigger()
"DROP TRIGGER IF EXISTS fku___rowid"
>>> GearsORM.Sql.dropTableByName()
"DROP TABLE IF EXISTS undefined"
>>> GearsORM.Sql.insertRowByModel()
>>> GearsORM.Sql.oneToManySql()
"_id INTEGER NOT NULL CONSTRAINT fk__id REFERENCES (rowid)"
>>> GearsORM.Sql.selectWithForigenKeys()
>>> GearsORM.Sql.selectWithManyToMany()
>>> GearsORM.Sql.updateByModel()
Wed, 22 Aug 2007 00:48:54 +0900 source edit
Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.
View All Posts. MiCHiLU.com powered by Django ;-)