Пример #1
0
        public void insert(string[] fieldNames, object[] values)
        {
            if (!isSingle)
            {
                throw new Exception(String.Format("不可输入多个表"));
            }

            List <Element> ele     = new List <Element>();
            List <long>    ID      = new List <long>();
            ElementCell    elecell = FieldType.setValueCell(values[0], this.columnTypes.ElementAt(columnNames.IndexOf(fieldNames[0])));

            Global.CloudStorage.SaveElementCell(elecell.CellID, elecell);
            ID.Add(elecell.CellID);
            for (int i = 1; i < fieldNames.Length; i++)
            {
                Element temp = FieldType.setValue(values[i], this.columnTypes.ElementAt(columnNames.IndexOf(fieldNames[i])));
                ele.Add(temp);
            }
            List <long> ids = Global.CloudStorage.InsertElementToDatabaseServer(0,
                                                                                new InsertMessageWriter(ele)).cellIds;

            for (int k = 0; k < ids.Count; k++)
            {
                ID.Add(ids[k]);
            }
            this.cellIds.Add(ID);
            long tableId = Database.getCurrentDatabase().getTableIdList()[Database.getCurrentDatabase().getTableNameList().IndexOf(tableNames
                                                                                                                                   [0])];
            TableHeadCell thc = new TableHeadCell(this.tableNames[0], this.columnNames, this.columnTypes, this.primaryIndexs, this.defaultValues, this.cellIds);

            Global.CloudStorage.SaveTableHeadCell(tableId, thc);
        }
Пример #2
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));
        }
Пример #3
0
        public void insert(string[] fieldNames, Table anotherTable)
        {
            if (this.tableNames.Count != 1)
            {
                throw new Exception(String.Format("不可输入多个表"));
            }
            for (int i = 0; i < anotherTable.cellIds.Count; i++)
            {
                this.cellIds.Add(anotherTable.cellIds[i]);
            }
            long tableId = Database.getCurrentDatabase().getTableIdList().ElementAt(Database.getCurrentDatabase().getTableNameList().IndexOf(tableNames
                                                                                                                                             [0]));
            TableHeadCell thc = new TableHeadCell(this.tableNames[0], this.columnNames, this.columnTypes, this.primaryIndexs, this.defaultValues, this.cellIds);

            Global.CloudStorage.SaveTableHeadCell(tableId, thc);
        }
Пример #4
0
        public void truncate()
        {
            if (!isSingle)
            {
                throw new Exception(String.Format("不可对多个表进行delete操作"));
            }

            TruncateMessageWriter tmw = new TruncateMessageWriter(cellIds);

            Global.CloudStorage.TruncateFromClientToDatabaseProxy(0, tmw);

            //this.cellIds = null;
            TableHeadCell thc   = new TableHeadCell(this.tableNames[0], this.columnNames, this.columnTypes, this.primaryIndexs, this.defaultValues, this.cellIds);
            long          thcId = Database.getCurrentDatabase().getTableIdList().ElementAt(Database.getCurrentDatabase().getTableNameList().IndexOf(tableNames
                                                                                                                                                    [0]));

            Global.CloudStorage.SaveTableHeadCell(thcId, thc);
        }
Пример #5
0
        public void delete(string con)
        {
            if (!isSingle)
            {
                throw new Exception(String.Format("不可对多个表进行delete操作"));
            }
            DeleteMessageWriter dmw        = new DeleteMessageWriter(cellIds, this.columnTypes, con);
            List <List <long> > newCellIds = Global.CloudStorage.DeleteFromClientToDatabaseProxy(0, dmw).cellIds;

            foreach (List <long> ids in newCellIds)
            {
                this.cellIds.Remove(ids);
            }
            TableHeadCell thc   = new TableHeadCell(this.tableNames[0], this.columnNames, this.columnTypes, this.primaryIndexs, this.defaultValues, this.cellIds);
            long          thcId = Database.getCurrentDatabase().getTableIdList().ElementAt(Database.getCurrentDatabase().getTableNameList().IndexOf(tableNames
                                                                                                                                                    [0]));

            Global.CloudStorage.SaveTableHeadCell(thcId, thc);
        }
Пример #6
0
        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);
        }
Пример #7
0
        public void insert(string[] fieldNames, object[][] values)
        {
            if (tableNames.Count > 1)
            {
                throw new Exception(String.Format("不可输入多个表"));
            }
            for (int j = 0; j < values.Length; j++)
            {
                List <Element> ele  = new List <Element>();
                List <long>    ID   = new List <long> {
                };
                ElementCell elecell = FieldType.setValueCell(values[j][0], this.columnTypes.ElementAt(columnNames.IndexOf(fieldNames[0])));
                Global.CloudStorage.SaveElementCell(elecell);
                ID.Add(elecell.CellID);
                for (int i = 1; i < fieldNames.Length; i++)
                {
                    Element temp = FieldType.setValue(values[j][i], this.columnTypes.ElementAt(columnNames.IndexOf(fieldNames[i])));
                    ele.Add(temp);
                }
                using (var request = new InsertMessageWriter(ele))
                {
                    int serverId = Global.CloudStorage.GetServerIdByCellId(elecell.CellID);
                    using (var res = Global.CloudStorage.InsertElementToDatabaseServer(serverId, request))
                    {
                        for (int k = 0; k < res.cellIds.Count; k++)
                        {
                            ID.Add(res.cellIds[k]);
                        }
                    }
                }
                this.cellIds.Add(ID);
            }
            long tableId = Database.getCurrentDatabase().getTableIdList().ElementAt(Database.getCurrentDatabase().getTableNameList().IndexOf(tableNames
                                                                                                                                             [0]));
            TableHeadCell thc = new TableHeadCell(this.tableNames[0], this.columnNames, this.columnTypes, this.primaryIndexs, this.defaultValues, this.cellIds);

            Global.CloudStorage.SaveTableHeadCell(tableId, thc);
        }