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);
        }
Exemple #3
0
        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));
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
 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);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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;
 }