public void should_create_date_const_expression() { var value = "2018-05-15"; var propertyInfo = new PropertyInfoProvider().GetPropertyInfoFromName("ADate", typeof(TestDocument)); var sut = new ValueProcessor(); var result = sut.Process(value, propertyInfo.PropertyType); result.Value.Should().Be(DateTime.Parse(value)); }
public void should_create_string_const_expression() { var value = "Some text"; var propertyInfo = new PropertyInfoProvider().GetPropertyInfoFromName("Text", typeof(TestDocument)); var sut = new ValueProcessor(); var result = sut.Process(value, propertyInfo.PropertyType); result.Value.Should().Be(value); }
public EsentRow Select(IEnumerable <EsentCell> columns, object key, Encoding keyEncoding = null) { CheckState(); var columnArray = columns as EsentCell[] ?? columns.ToArray(); var byteKey = ValueProcessor.GetBytes(key, keyEncoding); Api.MakeKey(Database.Session.JetId, JetId, byteKey, MakeKeyGrbit.NewKey); var success = Api.TrySeek(Database.Session.JetId, JetId, SeekGrbit.SeekEQ); if (!success) { return(null); } return(RetrieveColumns(columnArray)); }
private EsentRow RetrieveColumns(EsentCell[] columnArray) { var cells = new EsentRow(); foreach (var column in columnArray) { var columnName = column.ColumnName; var encoding = column.Encoding ?? Columns[column.ColumnName].Encoding; var type = Columns[columnName].ColumnType; var bytes = Api.RetrieveColumn(Database.Session.JetId, JetId, Columns[columnName].JetId); var value = ValueProcessor.FromBytes(type, bytes, encoding); cells.Add(new EsentCell(columnName, value, encoding)); } return(cells); }
public bool Delete(object key, Encoding keyEncoding = null) { CheckState(); var byteKey = ValueProcessor.GetBytes(key, keyEncoding); Api.MakeKey(Database.Session.JetId, JetId, byteKey, MakeKeyGrbit.NewKey); var success = Api.TrySeek(Database.Session.JetId, JetId, SeekGrbit.SeekEQ); if (!success) { return(false); } Api.JetDelete(Database.Session.JetId, JetId); return(true); }
public void Insert(params EsentCell[] columns) { CheckState(); using (Database.Session.BeginTransaction()) { Api.JetPrepareUpdate(Database.Session.JetId, JetId, JET_prep.Insert); foreach (var column in columns) { var encoding = column.Encoding ?? Columns[column.ColumnName].Encoding; var value = ValueProcessor.GetBytes(column.Value, encoding); if (value != null) { Api.SetColumn(Database.Session.JetId, JetId, Columns[column.ColumnName].JetId, value); } } Api.JetUpdate(Database.Session.JetId, JetId); } }
internal static EsentColumn Create <T>(EsentTable table, string name, Encoding encoding, int?max, object defaultValue, Option option) { var columnType = typeof(T); var column = new EsentColumn { Table = table, Name = name, ColumnType = columnType, Encoding = encoding, Max = max, DefaultValue = defaultValue, JetDef = { grbit = (ColumndefGrbit)option } }; var defaultValueBytes = ValueProcessor.GetBytes(defaultValue, encoding); var defaultValueSize = defaultValueBytes?.Length ?? 0; Api.JetAddColumn(table.Database.Session.JetId, table.JetId, name, column.JetDef, defaultValueBytes, defaultValueSize, out column.JetId); return(column); }
public int Update(Func <EsentRow, bool> predicate, Encoding keyEncoding = null, params EsentCell[] columns) { CheckState(); var exColumns = Columns.Select(c => new EsentCell(c.Value.Name, null, c.Value.Encoding)); var columnArray = exColumns as EsentCell[] ?? exColumns.ToArray(); var success = Api.TryMove(Database.Session.JetId, JetId, JET_Move.First, MoveGrbit.None); if (!success) { return(0); } var count = 0; while (true) { var cells = RetrieveColumns(columnArray); if (predicate(cells)) { count++; Api.JetPrepareUpdate(Database.Session.JetId, JetId, JET_prep.Replace); foreach (var column in columns) { var encoding = column.Encoding ?? Columns[column.ColumnName].Encoding; var value = ValueProcessor.GetBytes(column.Value, encoding); if (value != null) { Api.SetColumn(Database.Session.JetId, JetId, Columns[column.ColumnName].JetId, value); } } Api.JetUpdate(Database.Session.JetId, JetId); } if (!Api.TryMove(Database.Session.JetId, JetId, JET_Move.Next, MoveGrbit.None)) { break; } } return(count); }
public static T Deserialize <T>(EsentRow r) where T : new() { var obj = new T(); var type = typeof(T); var props = type.GetRuntimeProperties(); foreach (var cell in r) { var prop = props.FirstOrDefault(p => p.Name == cell.ColumnName); if (prop == null) { continue; } if (cell.Value?.GetType() == prop.PropertyType) { prop.SetValue(obj, cell.Value); } if (cell.Value?.GetType() == typeof(byte[]) && prop.PropertyType != typeof(byte[])) { prop.SetValue(obj, ValueProcessor.FromBytes(prop.PropertyType, cell.AsByteArray, cell.Encoding)); } } return(obj); }
private void RefreshColumns() { CheckState(); _columns = Api.GetTableColumns(Database.Session.JetId, JetId) .Select(i => new EsentColumn { Table = this, Name = i.Name, JetId = i.Columnid, JetDef = new JET_COLUMNDEF { coltyp = i.Coltyp, cp = i.Cp, cbMax = i.MaxLength, grbit = i.Grbit }, DefaultValue = ValueProcessor.FromBytes(i.Coltyp.ToClr(), i.DefaultValue?.ToArray(), Encoding.UTF8) } ) .ToDictionary(c => c.Name); _columnsValid = true; }