def _exists(self, db_query, table, data, ne_id):
     """
     Method: _exists
     Description: 检查记录是否存在
     """
     data = DBSyncUtil.deserialize(data)
     i = 1
     moid = None
     for attr in self.__moc_defs[table]['FIELDS']:
         if attr.name == 'moid':
             moid = data[i]
             break
         i = i + 1
     sql = 'SELECT * FROM user_sync.%s WHERE "moid"=:1 AND "_SYNC_SOURCE"=:2' % (self.__moc_defs[table]['TABLE_NAME'])
     debug.info(sql)
     records = db_query.select(sql, [moid, ne_id])
     if len(records) > 0:
         return True
     return False
 def _add(self, db_query, table, data, ne_id):
     """
     Method: _add
     Description: 追加记录
     Parameters:
         db_query: DB查询对象
         table: MOC名
         data: 数据
         ne_id: 客户端ID
     """
     data = DBSyncUtil.deserialize(data)
     fields = []
     field_indexes = []
     i = 1
     for attr in self.__moc_defs[table]['FIELDS']:
         if attr.name == '_SYNC_SOURCE':
             if i <= len(data):
                 data[i-1] = ne_id
             else:
                 data.append(ne_id)
         fields.append('"%s"' % attr.name)
         field_indexes.append(':%d' % i)
         i = i + 1
     sql = 'INSERT INTO user_sync.%s(%s) VALUES(%s)' % (self.__moc_defs[table]['TABLE_NAME']
                                              ,','.join(fields)
                                              ,','.join(field_indexes))
     debug.info(sql)
     debug.info(data)
     try:
         db_query.execute(sql, data)
     except DBQueryError, e:
         dberror = e.args[0]
         if issubclass(dberror.__class__, cx_Oracle.DatabaseError):
             error, = dberror.args
             # ORA-0001: unique constraint
             if error.code == 1:
                 tracelog.error('add conflict, full-sync will start')
                 return DBSyncStatus.ERROR_CONFLICT
         tracelog.exception('database error')
         return DBSyncStatus.ERROR_FAILED
 def _edit(self, db_query, table, data, condition, ne_id):
     """
     Method: _edit
     Description: 更新记录
     Parameters:
         db_query: DB查询对象
         table: MOC名
         data: 数据
         condition: 更新条件
         ne_id: 客户端ID
     """
     data = DBSyncUtil.deserialize(data)
     fields = []
     i = 1
     for attr in self.__moc_defs[table]['FIELDS']:
         if attr.name == '_SYNC_SOURCE':
             if i <= len(data):
                 data[i-1] = ne_id
             else:
                 data.append(ne_id)
         fields.append('"%s"=:%d' % (attr.name, i))
         i = i + 1
     if condition is None:
         sql = 'UPDATE user_sync.%s SET %s' % (self.__moc_defs[table]['TABLE_NAME']
                                          ,','.join(fields))
     else:
         sql = 'UPDATE user_sync.%s SET %s WHERE %s' % (self.__moc_defs[table]['TABLE_NAME']
                                          ,','.join(fields)
                                          ,condition)
     debug.info(sql)
     debug.info(data)
     cursor = db_query.execute(sql, data)
     if cursor is not None and cursor.rowcount == 0:
         tracelog.error('update conflict, full-sync will start')
         return DBSyncStatus.ERROR_CONFLICT
     return DBSyncStatus.ERROR_SUCCESS