Beispiel #1
0
        public SyncSource(int id, String name, String strSyncType, DBAdapter db, SyncEngine syncEngine )
        {
    	    m_syncEngine = syncEngine;
    	    m_dbAdapter = db;
            m_nID = id;
            m_strName = name;
            m_strSyncType = strSyncType;
        
            m_nCurPageCount = 0;
            m_nInserted = 0;
            m_nDeleted = 0;
            m_nTotalCount = 0;
            m_bGetAtLeastOnePage = false;

            m_nErrCode = RhoAppAdapter.ERR_NONE;

            IDBResult res = db.executeSQL("SELECT token,associations from sources WHERE source_id=?", m_nID);
            if ( !res.isEnd() )
            {
        	    m_token = res.getLongByIdx(0);
                m_bTokenFromDB = true;
            }else
            {
        	    m_token = 0;
                m_bTokenFromDB = true;
            }
        
            m_bSchemaSource = db.isTableExist(m_strName);
            parseAssociations(res.getStringByIdx(1));
        }
Beispiel #2
0
        public void loadBlobAttrs(DBAdapter db)
        {
            loadAttrs(db, m_mapBlobAttrs, "blob_attribs", m_mapSrcNames);

            String    strTriggerPrefix = "rhoSchemaTrigger_";
            IDBResult res = db.executeSQL("SELECT name FROM sqlite_master WHERE type='trigger'");
            Hashtable <String, int> mapTriggers = new Hashtable <String, int>();

            for (; !res.isEnd(); res.next())
            {
                String strName = res.getStringByIdx(0);
                if (!strName.startsWith(strTriggerPrefix))
                {
                    continue;
                }

                mapTriggers[strName.Substring(strTriggerPrefix.length())] = 0;
            }

            foreach (KeyValuePair <int, Hashtable <String, int> > kvpBlobAttrs in m_mapBlobAttrs)
            {
                int nSrcID = kvpBlobAttrs.Key;

                res = db.executeSQL("SELECT name FROM sources WHERE source_id=?", nSrcID);
                if (res.isEnd())
                {
                    continue;
                }

                String strName = res.getStringByIdx(0);
                if (!db.isTableExist(strName))
                {
                    continue;
                }

                Hashtable <String, int> hashAttribs = kvpBlobAttrs.Value;
                foreach (KeyValuePair <String, int> kvpHashAttribs in hashAttribs)
                {
                    String strTriggerName = strName + "_" + kvpHashAttribs.Key;
                    if (!mapTriggers.containsKey(strTriggerName + "_delete"))
                    {
                        String strTrigger = "CREATE TRIGGER " + strTriggerPrefix + strTriggerName + "_delete BEFORE DELETE ON \"" + strName + "\" FOR EACH ROW \r\n"
                                            + "   BEGIN \r\n"
                                            + "       SELECT rhoOnDeleteSchemaRecord( OLD." + kvpHashAttribs.Key + ");\r\n"
                                            + "   END;\r\n"
                                            + ";";

                        db.createTrigger(strTrigger);
                    }
                    else
                    {
                        mapTriggers[strTriggerName + "_delete"] = 1;
                    }

                    if (!mapTriggers.containsKey(strTriggerName + "_update"))
                    {
                        String strTrigger = "CREATE TRIGGER " + strTriggerPrefix + strTriggerName + "_update BEFORE UPDATE ON \"" + strName + "\" FOR EACH ROW\r\n"
                                            + "   BEGIN \r\n"
                                            + "       SELECT rhoOnUpdateSchemaRecord( OLD." + kvpHashAttribs.Key + ", NEW." + kvpHashAttribs.Key + ");\r\n"
                                            + "   END;\r\n"
                                            + ";";

                        db.createTrigger(strTrigger);
                    }
                    else
                    {
                        mapTriggers[strTriggerName + "_update"] = 1;
                    }
                }
            }

            //Remove outdated triggers
            foreach (KeyValuePair <string, int> kvp in mapTriggers)
            {
                if (kvp.Value != 0)
                {
                    db.dropTrigger(strTriggerPrefix + kvp.Key.ToString());
                }
            }
        }
Beispiel #3
0
        public SyncSource(SyncEngine syncEngine, DBAdapter db)
        {
    	    m_syncEngine = syncEngine;
    	    m_dbAdapter = db;
    	
            m_nID = 0;
        
            m_bTokenFromDB = true;

            m_nCurPageCount = 0;
            m_nInserted = 0;
            m_nDeleted = 0;
            m_nTotalCount = 0;
            m_bGetAtLeastOnePage = false;

            m_nErrCode = RhoAppAdapter.ERR_NONE;
            m_bSchemaSource = db.isTableExist(m_strName);
        }
Beispiel #4
0
    public void loadBlobAttrs(DBAdapter db)
    {
        loadAttrs(db, m_mapBlobAttrs, "blob_attribs", m_mapSrcNames);

        String strTriggerPrefix = "rhoSchemaTrigger_";
        IDBResult res = db.executeSQL("SELECT name FROM sqlite_master WHERE type='trigger'");
        Hashtable<String, int> mapTriggers = new Hashtable<String, int>();
        for (; !res.isEnd(); res.next())
        {
            String strName = res.getStringByIdx(0);
            if (!strName.startsWith(strTriggerPrefix))
                continue;

            mapTriggers[strName.Substring(strTriggerPrefix.length())] = 0;
        }

        foreach (KeyValuePair<int, Hashtable<String,int>> kvpBlobAttrs in m_mapBlobAttrs)
        {
            int nSrcID = kvpBlobAttrs.Key;

            res = db.executeSQL("SELECT name FROM sources WHERE source_id=?", nSrcID);
            if ( res.isEnd() )
                continue;

            String strName = res.getStringByIdx(0);
            if ( !db.isTableExist(strName) )
                continue;

            Hashtable<String,int> hashAttribs = kvpBlobAttrs.Value;
            foreach (KeyValuePair<String, int> kvpHashAttribs in hashAttribs)
            {
                String strTriggerName = strName + "_" + kvpHashAttribs.Key;
                if ( !mapTriggers.containsKey(strTriggerName + "_delete") )
                {
                    String strTrigger = "CREATE TRIGGER " + strTriggerPrefix + strTriggerName + "_delete BEFORE DELETE ON \"" + strName + "\" FOR EACH ROW \r\n"
                    +"   BEGIN \r\n"
                    + "       SELECT rhoOnDeleteSchemaRecord( OLD." + kvpHashAttribs.Key + ");\r\n"
                    +"   END;\r\n"
                    +";";

                    db.createTrigger(strTrigger);
                }else
                    mapTriggers[strTriggerName + "_delete"] = 1;

                if ( !mapTriggers.containsKey(strTriggerName + "_update") )
                {
                    String strTrigger = "CREATE TRIGGER " + strTriggerPrefix + strTriggerName + "_update BEFORE UPDATE ON \"" + strName + "\" FOR EACH ROW\r\n"
                    +"   BEGIN \r\n"
                    + "       SELECT rhoOnUpdateSchemaRecord( OLD." + kvpHashAttribs.Key + ", NEW." + kvpHashAttribs.Key + ");\r\n"
                    +"   END;\r\n"
                    +";";

                    db.createTrigger(strTrigger);
                }else
                    mapTriggers[strTriggerName + "_update"] = 1;

                }
        }

        //Remove outdated triggers
        foreach (KeyValuePair<string, int> kvp in mapTriggers)
        {
            if(kvp.Value != 0)
                db.dropTrigger(strTriggerPrefix+kvp.Key.ToString());
        }
    }