Example #1
0
        /// <summary>
        /// Получение версии базы и начальная миграция
        /// </summary>
        private void GetDBVersion()
        {
            try
            {
                IDBTable table = DB["etl_params"];

                // При отсутствии таблицы мигрируем базу до нулевой версии
                if (table == null)
                {
                    UpTo("0.0.0");
                }
                else
                {
                    dynamic result = DB.Query(
                        "select value " +
                        " from etl_params" +
                        " where name = 'Version'").Single();

                    Version = new Version(result.value);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Ошибка при получении версии базы данных.", ex);
            }
        }
Example #2
0
        public AEDBObject(IDBTable table, object memDB, string id, object data, bool isFromDB)
        {
            _table = (IDBTable)table;
            _memDB = (DBRedisDB)memDB;
            _id    = id;

            dynamic d = data;

            for (int i = 0; i < _table.desc.columCount; ++i)
            {
                string keyName = _table.desc.getName(i);
                _datas[keyName] = d[keyName];

                if (isFromDB)
                {
                    // data from database, update last save datas
                    if (_table.desc.getDataType(keyName) == AEDBDataType.ADDT_BINARY)
                    {
                        byte[] objBytes = AEDBHelper.serializeObject(d[keyName]);
                        _lastSaveDatas[keyName] = objBytes;
                    }
                    else
                    {
                        _lastSaveDatas[keyName] = d[keyName];
                    }
                }
            }
        }
Example #3
0
        public void ResizeTable(uint tableID, int szDatum)
        {
            Assert(Tables[tableID] != null);
            Assert(szDatum >= Tables[tableID].DatumSize);

            lock (m_lock)
            {
                IDBTable tbl = GetTable(tableID, true);

                if (tbl.DatumSize < szDatum)
                {
                    string tmpFile = Path.GetTempFileName();
                    using (new AutoReleaser(() => File.Delete(tmpFile)))
                        using (FileStream fs = File.Create(tmpFile))
                        {
                            var tmpWriter       = new RawDataWriter(fs, Encoding.UTF8);
                            IDBTableProvider dp = m_accessPath.GetDataProvider(tableID);

                            using (dp.Lock())
                            {
                                foreach (IDataRow row in dp.Enumerate())
                                {
                                    row.Write(tmpWriter);
                                }


                                var tmpReader = new RawDataReader(fs, Encoding.UTF8);
                                int count     = dp.Count;

                                BeginTableProcessing?.Invoke(tableID);

                                using (new AutoReleaser(() => EndTableProcessing?.Invoke(tableID)))
                                {
                                    uint ver = tbl.Version;
                                    uint tag = tbl.Tag;

                                    dp.Disconnect();
                                    tbl.Disconnect();
                                    File.Delete(tbl.FilePath);
                                    tbl.Create(szDatum, tag);
                                    dp.Connect();

                                    fs.Position = 0;

                                    for (int i = 0; i < count; ++i)
                                    {
                                        IDataRow datum = m_dataFactory.CreateDatum(tableID);
                                        datum.Read(tmpReader);
                                        dp.Insert(datum);
                                    }

                                    tbl.Version = ver;
                                    tbl.Flush();
                                }
                            }
                        }
                }
            }
        }
Example #4
0
 public override void Resolve(IDatabaseSchema database, IDBTable table)
 {
     base.Resolve (database, table);
     ReferencesTable = database[ReferencesTableName];
     ThroughTable = database[ThroughTableName];
     ThroughColumnThis = FindFk(this.Table, ThroughColumnNameThis);
     ThroughColumnThat = FindFk(ReferencesTable, ThroughColumnNameThat);
 }
Example #5
0
        private void tblCases(IDBSchema sch)
        {
            IDBTable tblCases = sch.AddTable("tblCases", new DBTableDescriptor());

            tblCases.AddField("Ctx1MinKul_Opis", new DBFieldDescriptor()
            {
                FieldType = new DBFieldTypeNvarchar(), Nullable = true, Size = 512
            },
                              new DBRevision(new DateTime(2016, 9, 19), 1, eDBRevisionType.Create));
        }
            public IDBTable this[uint tableID]
            {
                get
                {
                    Monitor.Enter(m_owner.m_lock);
                    IDBTable tbl = m_owner.GetTable(tableID, true);
                    Monitor.Exit(m_owner.m_lock);

                    return(tbl);
                }
            }
Example #7
0
 public override void Resolve(IDatabaseSchema database, IDBTable table)
 {
     base.Resolve (database, table);
     try
     {
         ReferencesTable = database[ReferencesTableName];
     }
     catch(KeyNotFoundException ex)
     {
         throw new Exception("Tabulka "+ReferencesTableName+" nebyla nalezena", ex);
     }
     if(ReferencesColumnName != null)
         ReferencesColumn = ReferencesTable[ReferencesColumnName];
     else
         ReferencesColumn = ReferencesTable.PrimaryKey;
 }
        public void Init()
        {
#if UNITY_EDITOR || UNITY_STANDALONE
            appDBPath = Application.streamingAssetsPath + "/DB/" + DBName;
#elif UNITY_ANDROID
            appDBPath = Application.persistentDataPath + "/" + DBName;
            WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets/" + DBName);
            while (loadDB.isDone)
            {
                File.WriteAllBytes(appDBPath, loadDB.bytes);
            }
#endif
            OpenDB("URI=file:" + appDBPath);
            m_DBTableManager = new DBTableManager();
            m_UserTable      = CreateDBTable <DBUser>(userTableName);
        }
Example #9
0
        IDBTable GetTable(uint tableID, bool connect)
        {
            IDBTable tbl = AllTables.FirstOrDefault(t => t.ID == tableID);

            if (!connect)
            {
                return(tbl);
            }

            Dbg.Assert(Program.Settings.ClientInfo != null);

            if (tbl != null)
            {
                if (!tbl.IsConnected)
                {
                    try
                    {
                        tbl.Connect();

                        if (tbl.Tag != Program.Settings.ClientInfo.ClientID)
                        {
                            throw new BadTagException(tbl.Name);
                        }
                    }
                    catch (FileNotFoundException)
                    {
                        System.Diagnostics.Debug.WriteLine($"Impossible d'ouvrir la table {tbl.Name}\nLancement de la procedure de création...");

                        try
                        {
                            tbl.Create(1, Program.Settings.ClientInfo.ClientID);
                        }
                        catch (Exception ex)
                        {
                            System.Diagnostics.Debug.WriteLine($"Erreur lors de la création du fichier!\n Exception: {ex.Message}");
                            throw;
                        }

                        System.Diagnostics.Debug.WriteLine("Création ok");
                    }
                }
            }

            return(tbl);
        }
Example #10
0
 private IDBColumnForeign FindFk(IDBTable reftable, string fkname)
 {
     IDBColumnForeign[] fks;
     fks = ThroughTable.FindTiesTo(reftable);
     if(ThroughColumnNameThis == null)
     {
         if(fks.Length != 1)
             throw new Exception("Nebyl nalezen právě jeden klíč");
         return fks[0];
     }
     else
     {
         foreach(IDBColumnForeign fk in fks)
             if(fk.Name == fkname)
                 return fk;
         throw new Exception("Nebyl nalezen klíč pro vazbu many to many");
     }
 }
Example #11
0
        private bool OnLoginClick(string accountInput, string passwordInput)
        {
            int account;
            int password;

            if (!int.TryParse(accountInput, out account))
            {
                //Log.Error("Account must be number!");
                return(false);
            }

            if (!int.TryParse(passwordInput, out password))
            {
                //Log.Error("Password must be number!");
                return(false);
            }

            if (GameEntry.Database.TryLogin(account, password))
            {
                m_ProcedureOwner.SetData <VarInt>(Constant.ProcedureData.UserId, account);
                m_LoginSuccess = true;

                IDBTable <DBUser> dtUser = GameEntry.Database.GetDBTable <DBUser>();
                DBUser            drUser = dtUser.GetDBRow(account);
                if (drUser == null || drUser.Player == 0)
                {
                    m_GetPlayerSuccess = false;
                }
                else
                {
                    m_ProcedureOwner.SetData <VarInt>(Constant.ProcedureData.PlayerId, drUser.Player);
                    m_GetPlayerSuccess = true;
                }

                return(true);
            }
            else
            {
                //Log.Error("账号密码不存在!");
                return(false);
            }
        }
Example #12
0
        static void ApplyUpdate(string updateFile)
        {
            IEnumerable <TableUpdate> updates = UpdateEngin.LoadTablesUpdate(updateFile, Program.TablesManager.DataFactory);

            foreach (TableUpdate update in updates)
            {
                IDBTable table = Program.TablesManager.Tables[update.TableID];
                //TODO: traiter le cas ou une version de table est manquante ex: 1,2 ,4

                if (table.Version != update.PreGeneration)
                {
                    continue;
                }

                using (new AutoReleaser(() => EndTableUpdate?.Invoke(table.ID)))
                {
                    BeginTableUpdate?.Invoke(table.ID);

                    if (update.DatumMaxSize > table.DatumSize)
                    {
                        Program.TablesManager.ResizeTable(table.ID, update.DatumMaxSize);
                    }

                    using (var ndxer = new DBKeyIndexer(Program.TablesManager, update.TableID))
                    {
                        ndxer.Connect();

                        foreach (IUpdateAction action in update.Actions)
                        {
                            ApplyAction(action, ndxer);
                        }
                    }

                    table.Version = update.PostGeneration;
                }
            }
        }
Example #13
0
        private void OnLoginClick(string account, string password)
        {
            if (GameEntry.Database.TryLogin(account, password))
            {
                m_ProcedureOwner.SetData <VarString>(Constant.ProcedureData.UserId, account);
                m_LoginSuccess = true;

                IDBTable <DBUser> dtUser = GameEntry.Database.GetDBTable <DBUser>();
                DBUser            drUser = dtUser.GetDBRow(int.Parse(account));
                if (drUser == null || drUser.Player == 0)
                {
                    m_GetPlayerSuccess = false;
                }
                else
                {
                    m_ProcedureOwner.SetData <VarInt>(Constant.ProcedureData.PlayerId, drUser.Player);
                    m_GetPlayerSuccess = true;
                }
            }
            else
            {
                Log.Error("账号密码不存在!");
            }
        }
Example #14
0
 public void                     CreateTable(IDBTable table) => _tableAccess.CreateTable(table);
Example #15
0
 public void Execute(DBTriggerPosition action, IDatabaseSchema database, IDBTable table, string query, DataRow row)
 {
     throw new NotImplementedException();
 }
Example #16
0
 public AEDBPersistObject(object persistDB, IDBTable table, object memDB, string id, object data, bool isFromDB) : base(table, memDB, id, data, isFromDB)
 {
     _persistDB = (DBMySqlDB)persistDB;
 }
Example #17
0
 public void CreateTable(IDBTable table)
 {
     throw new System.NotImplementedException();
 }
        /// <summary>
        /// 获取数据行
        /// </summary>
        /// <typeparam name="T">数据行类型</typeparam>
        /// <param name="id">编号</param>
        /// <returns></returns>
        public T GetDBRow <T>(int id) where T : IDBRow
        {
            IDBTable <T> dbTable = GetDBTable <T>();

            return(dbTable.GetDBRow(id));
        }
Example #19
0
 public Entity(IDBTable dbTable)
 {
     table = dbTable;
     dt    = new DataTable();
     dt.Columns.AddRange(table.Attributes.Select(a => new DataColumn(a.Name, a.Type)).ToArray());
 }
        /// <summary>
        /// 创建数据表
        /// </summary>
        /// <typeparam name="T">数据表行类型</typeparam>
        /// <param name="tableName">数据表名称</param>
        /// <returns></returns>
        public IDBTable <T> CreateDBTable <T>(string tableName) where T : class, IDBRow, new()
        {
            IDBTable <T> dbTable = m_DBTableManager.CreateDBTable <T>(tableName);

            return(dbTable);
        }
        /// <summary>
        /// 添加数据行当数据表
        /// </summary>
        /// <typeparam name="T">数据行类型</typeparam>
        /// <param name="dbTable">数据表</param>
        /// <param name="id">编号</param>
        /// <param name="dbRow">数据行</param>
        public void AddDBRow <T>(int id, IDBRow dbRow) where T : IDBRow
        {
            IDBTable <T> dbTable = GetDBTable <T>();

            dbTable.AddDBRow(id, (T)dbRow);
        }
Example #22
0
 public virtual void Resolve(IDatabaseSchema database, IDBTable table)
 {
     this.Table = table;
 }