Skip to content

kemsky/as3Query

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

As3Query

Another SQLite ORM and query DSL for Flex and Adobe Air

Uses Promises/A+ library.

Annotations list:

  • Specify table name [Table(name="test")]
  • Specify table index (or multiple indices) [Index(name="test_index_1", columns="unsigned,bool", unique="true")]
  • Specify table column [Column(primaryKey, nullable="false", unique="true", foreignKey="table(id)", options="deferred", default="1")]

Usage:

  1. Put annotations:

        [Table(name="test")]
        [Index(name="test_index_1", columns="unsigned,bool")]
        [Index(name="test_index_2", columns="str", unique="true")]
        public dynamic class TestEntity
        {
            [Column(primaryKey, nullable="false")]
            public var id:int;
    
            [Column(default="1")]
            public var unsigned:uint;
    
            [Column(unique="true")]
            public var date:Date;
    
            [Column]
            public var xml:XML;
    
            [Column]
            public var xmlList:XMLList;
    
            [Column]
            public var object:Object;
    
            [Column]
            public var bool:Boolean;
    
            [Column]
            public var num:Number;
    
            [Column]
            public var str:String;
    
            [Column(foreignKey="table(id)", options="deferred")]
            public var fk_table:int;
        }
  2. Map entity:

        var entityManager:EntityMapper = new EntityMapper();
        entityManager.registerEntity(TestEntity);
  3. Create tables:

         var connection:SQLConnection = new SQLConnection();
         connection.open(file, SQLMode.CREATE);
         try
         {
            new CreateTables(connection, [TestEntity], mapper).call();
         }
         finally
         {
             if(connection.connected)
             {
                 connection.close();
             }
         }
  4. Create session:

        var session:Session = new Session(mapper);
        session.open(file.nativePath, SQLMode.UPDATE).then(function ():void{ trace('ok') });
  5. Perform different operations:

    Criteria

        session.criteria(TestEntity).by(Order.asc(TestEntity.ATTR_ID)).list.then(function (operation:ISQLOperation):void{ 
            trace(operation.result); 
        });
        session.criteria(TestEntity).when(Restrictions.Eq(TestEntity.ATTR_ID, 1)).unique.then(function (operation:ISQLOperation):void{ 
            trace(operation.result); 
        });
        session.criteria(TestEntity).when(Restrictions.Eq(TestEntity.ATTR_ID, 1)).count.then(function (count:int):void{ 
            trace(count); 
        });

    Create, update

        session.save(testCriteriaEntity1).then(function ():void{ trace('ok') });

    Delete

        session.remove(testCriteriaEntity1).then(function ():void{ trace('ok') });

    Transactions

        var transaction:ITransaction = session.transaction;
    
        transaction.insert(testCriteriaEntity1);
        transaction.insert(testCriteriaEntity2);
        transaction.remove(testCriteriaEntity2);
        
        transaction.run.then(function (operation:ISQLOperation):void{ 
            trace('ok'); 
        });

    Raw queries

       var query:IQuery = session.query;
       query.text = "update test set str=:str where str=:id";
       query.parameters[":id"] = "inserted2";
       query.parameters[":str"] = "inserted3";
       query.run.then(function (operation:ISQLOperation):void{ 
            trace('ok'); 
       });

You can add metadata validation to Intellij Idea using KnownMetaData.dtd file. Open Preferences > Schemas and DTDs > Add KnownMetaData.dtd with URI urn:Flex:Meta