/// <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); } }
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]; } } } }
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(); } } } } } }
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); }
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); } }
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); }
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); }
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"); } }
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); } }
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; } } }
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("账号密码不存在!"); } }
public void CreateTable(IDBTable table) => _tableAccess.CreateTable(table);
public void Execute(DBTriggerPosition action, IDatabaseSchema database, IDBTable table, string query, DataRow row) { throw new NotImplementedException(); }
public AEDBPersistObject(object persistDB, IDBTable table, object memDB, string id, object data, bool isFromDB) : base(table, memDB, id, data, isFromDB) { _persistDB = (DBMySqlDB)persistDB; }
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)); }
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); }
public virtual void Resolve(IDatabaseSchema database, IDBTable table) { this.Table = table; }