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); }
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)); }
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); }
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); }
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); }
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); }
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); }