public UniqueTable(TableName tname, DataTable table) { this.TableName = tname; this.table = table; int i = 0; int I1 = -1; int I2 = -1; foreach (DataColumn column in table.Columns) { if (column.ColumnName == PHYSLOC) { this.hasPhysloc = true; colLoc = column; I1 = i; } if (column.ColumnName == ROWID) { colRowID = column; I2 = i; } i++; } this.parimaryKeys = tname.GetTableSchema().PrimaryKeys.Keys; if (I2 == -1) { return; } i = 0; foreach (DataRow row in table.Rows) { if (I1 != -1) { LOC.Add((byte[])row[I1]); } if (I2 != -1) { row[I2] = i++; } } colRowID.ColumnName = ROWID_HEADER; if (I1 != -1) { table.Columns.Remove(colLoc); } table.AcceptChanges(); }
/// <summary> /// Add all columns of table /// </summary> /// <param name="tname"></param> /// <returns></returns> public DataFieldCollection Add(TableName tname) { var meta = tname.GetTableSchema(); //some columns in [this.dataTable] may be from other tables Add(meta.NewRow()); UpdatePrimaryIdentity(tname); return(this); }
/// <summary> /// use default locator to save records into database, primary keys must be defined /// </summary> /// <param name="tableName"></param> public TableWriter(TableName tableName) { this.schema = tableName.GetTableSchema(); IPrimaryKeys primary = schema.PrimaryKeys; if (primary.Length != 0) { this.locator = new Locator(primary); } }
public void InsertRow(DataRow row) { List <string> columns = new List <string>(); List <object> values = new List <object>(); List <SqlExpr> where = new List <SqlExpr>(); var _columns = TableName.GetTableSchema().Columns; foreach (DataColumn column in table.Columns) { object value = row[column]; string name = column.ColumnName; IColumn _column = _columns[column.ColumnName]; if (column == colRowID || _column.IsIdentity) { continue; } if (value != DBNull.Value) { columns.Add(name); values.Add(value); where.Add(name.Equal(value)); } else if (!_column.Nullable) //add default value to COLUMN NOT NULL { Type type = _column.CType.ToType(); value = GetDefault(type); columns.Add(name); values.Add(value); where.Add(name.Equal(value)); } } var builder = new SqlBuilder().INSERT(TableName, columns.ToArray()).VALUES(values.ToArray()); new SqlCmd(builder).ExecuteNonQuery(); if (colLoc != null) { builder = new SqlBuilder().SELECT().COLUMNS(PHYSLOC).FROM(TableName).WHERE(where.AND()); var loc = new SqlCmd(builder).FillObject <byte[]>(); LOC.Add(loc); //todo: load identity } row[colRowID] = table.Rows.Count - 1; //this will trigger events ColumnChanged or RowChanged row.AcceptChanges(); }
public void Validate() { ITableSchema metaTable = tableName.GetTableSchema(); foreach (ColumnAdapter column in columns) { DataField field = column.Field; if (field.Saved || field.Primary) { IColumn metaColumn = metaTable.Columns[field.Name]; if (!metaColumn.Nullable && (column.Value == System.DBNull.Value || column.Value == null)) { throw new MessageException("Column[{0}] value cannot be null", field.Name); } if (metaColumn.Oversize(column.Value)) { throw new MessageException("Column[{0}] is oversize, limit={1}, actual={2}", field.Name, metaColumn.Length, ((string)(column.Value)).Length); } } } }
/// <summary> /// use user defined locator to save records into database /// </summary> /// <param name="tableName"></param> /// <param name="locator"></param> public TableWriter(TableName tableName, Locator locator) { this.schema = tableName.GetTableSchema(); this.locator = locator; }
public void UpdatePrimaryIdentity(TableName tableName) { TableSchema meta = tableName.GetTableSchema(); UpdatePrimaryIdentity(meta.PrimaryKeys, meta.Identity); }
public Locator(TableName tname) : this(tname.GetTableSchema().PrimaryKeys) { }