示例#1
0
        public Table createTable(string name, string[] primaryKeyList, params Tuple <int, string, object>[] fields)
        {
            if (tableExists(name))  //表已存在
            {
                throw new Exception(String.Format("表{0}已经存在!", name));
            }
            TableHeadCell thc = new TableHeadCell(tableName: name, columnNameList: new List <string>(),
                                                  columnTypeList: new List <int>(), cellIds: new List <List <long> >(), defaultValue: new List <Element>(),
                                                  primaryIndex: new List <int>());

            if (fields == null || fields.Length == 0)
            {
                throw new Exception("建立表至少要有一个字段");
            }
            for (int i = 0; i < fields.Length; i++)
            {
                int    type         = fields[i].Item1;
                string fieldName    = fields[i].Item2;
                object defaultValue = fields[i].Item3;
                if (thc.columnNameList.Contains(fieldName))
                {
                    throw new Exception(String.Format("重复声明的字段:{0}.", fieldName));
                }
                thc.columnNameList.Add(fieldName);
                thc.columnTypeList.Add(type);
                thc.defaultValue.Add(FieldType.setValue(defaultValue, type));
            }
            if (primaryKeyList != null && primaryKeyList.Length > 0)
            {
                for (int i = 0; i < primaryKeyList.Length; i++)
                {
                    string key = primaryKeyList[i];
                    if (!thc.columnNameList.Contains(key))
                    {
                        throw new Exception(String.Format("字段{0}不在字段列表中,不能作为主键.", key));
                    }
                    thc.primaryIndex.Add(thc.columnNameList.IndexOf(key));
                }
            }
            //cell已经建好,存储于云端
            Global.CloudStorage.SaveTableHeadCell(thc);
            //向数据库写入表的信息,并更新到云
            tableIdList.Add(thc.CellID);
            tableNameList.Add(thc.tableName);
            //更新databasecell
            DatabaseCell dc         = new DatabaseCell(this.name, tableNameList, tableIdList);
            long         databaseId = HashHelper.HashString2Int64(this.name);

            Global.CloudStorage.SaveDatabaseCell(databaseId, dc);
            return(new Table(name));
        }
示例#2
0
文件: Table.cs 项目: zoukaifa/TriSQL
        public void rename(string newName)
        {
            long tableId = Database.getCurrentDatabase().getTableIdList().ElementAt(Database.getCurrentDatabase().getTableNameList().IndexOf(tableNames
                                                                                                                                             [0]));
            TableHeadCell thc = new TableHeadCell(newName, this.columnNames, this.columnTypes, this.primaryIndexs, this.defaultValues, this.cellIds);

            Global.CloudStorage.SaveTableHeadCell(tableId, thc);
            //更改数据库里的tablelist信息
            List <string> tbName = Database.getCurrentDatabase().getTableNameList();
            List <long>   tbID   = Database.getCurrentDatabase().getTableIdList();

            tbName.RemoveAt(tbID.IndexOf(tableId));
            tbID.Remove(tableId);
            tbName.Add(newName);
            tbID.Add(tableId);
            long         dbId = HashHelper.HashString2Int64(Database.getCurrentDatabase().getName());
            DatabaseCell dbc  = new DatabaseCell(Database.getCurrentDatabase().getName(), tbName, tbID);

            Global.CloudStorage.SaveDatabaseCell(dbId, dbc);
        }
示例#3
0
        /// <summary>
        /// 建立一个新的数据库
        /// </summary>
        /// <param name="name">数据库的名字</param>
        /// <returns>对应于该数据库的Database的实例化对象</returns>
        public static Database createDatabase(string name)
        {
            long databaseId = HashHelper.HashString2Int64(name);

            //先确认该数据库并不存在
            if (Global.CloudStorage.Contains(databaseId))
            {
                throw new Exception(String.Format("数据库{0}已经存在!", name));
            }

            DatabaseCell dbc = new DatabaseCell(name: name, tableIdList: new List <long>(),
                                                tableNameList: new List <string>());

            //以数据库名的hash为cellId,存入云端
            Global.CloudStorage.SaveDatabaseCell(databaseId, dbc);
            Database database = new Database(name, dbc.tableIdList, dbc.tableNameList);

            currentDatabase = database;
            return(database);
        }
示例#4
0
        /// <summary>
        /// 删除一个已经存在的表
        /// </summary>
        /// <param name="name">要删除的表名</param>
        public void dropTable(string name)
        {
            if (!tableExists(name))
            {
                throw new Exception(String.Format("表{0}不存在.", name));
            }
            new Table(name).truncate();  //先清空
            //先移除cell
            long cellId = tableIdList.ElementAt(tableNameList.IndexOf(name));

            Global.CloudStorage.RemoveCell(cellId);
            //再移除数据库内信息
            tableNameList.Remove(name);
            tableIdList.Remove(cellId);
            //再同步云端的数据库
            DatabaseCell dc         = new DatabaseCell(this.name, tableNameList, tableIdList);
            long         databaseId = HashHelper.HashString2Int64(this.name);

            Global.CloudStorage.SaveDatabaseCell(databaseId, dc);
        }