public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (dataStrategy is SimpleTransaction) return null;

            if (binder.Name.Equals("FindBy") || binder.Name.Equals("find_by"))
            {
                if (args.Length == 0) throw new ArgumentException("FindBy requires arguments.");
                if (args.Length == 1)
                {
                    if (ReferenceEquals(args[0], null)) throw new ArgumentException("FindBy does not accept unnamed null argument.");
                    if (args[0].GetType().Namespace == null) return null;
                }
            }

            var criteriaDictionary = CreateCriteriaDictionary(binder, args);
            if (criteriaDictionary == null) return null;

            var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary);
            try
            {
                var adapter = dataStrategy.GetAdapter();
                var func = adapter.OptimizingDelegateFactory.CreateFindOneDelegate(adapter, table.GetQualifiedName(), criteriaExpression);
                return a =>
                           {
                               var data = func(a);
                               return (data != null && data.Count > 0)
                                          ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy)
                                          : null;
                           };
            }
            catch (NotImplementedException)
            {
                return null;
            }
        }
 public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args));
     return new SimpleQuery(dataStrategy.Adapter, table.GetQualifiedName()).Where(criteria);
     //var data = dataStrategy.Find(table.GetQualifiedName(), criteria);
     //return CreateSimpleResultSet(table, dataStrategy, data);
 }
Exemple #3
0
        public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (dataStrategy is SimpleTransaction) return null;

            var criteriaDictionary = CreateCriteriaDictionary(binder, args);
            if (criteriaDictionary == null) return null;

            var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary);
            try
            {
                var adapter = dataStrategy.GetAdapter();
                var func = adapter.OptimizingDelegateFactory.CreateFindOneDelegate(adapter, table.GetQualifiedName(), criteriaExpression);
                return a =>
                           {
                               var data = func(a);
                               return (data != null && data.Count > 0)
                                          ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy)
                                          : null;
                           };
            }
            catch (NotImplementedException)
            {
                return null;
            }
        }
        public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (dataStrategy is SimpleTransaction) return null;

            if (binder.Name.Equals("FindBy") || binder.Name.Equals("find_by"))
            {
                ArgumentHelper.CheckFindArgs(args, binder);
                if (args.Length == 1 && args[0].IsAnonymous()) return null;
            }

            var criteriaDictionary = ArgumentHelper.CreateCriteriaDictionary(binder, args, "FindBy", "find_by");
            if (criteriaDictionary == null) return null;

            var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary);
            try
            {
                var adapter = dataStrategy.GetAdapter();
                var func = adapter.OptimizingDelegateFactory.CreateFindOneDelegate(adapter, table.GetQualifiedName(), criteriaExpression);
                return a =>
                           {
                               var data = func(a);
                               return (data != null && data.Count > 0)
                                          ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy)
                                          : null;
                           };
            }
            catch (NotImplementedException)
            {
                return null;
            }
        }
 public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(),
                                                                              CreateCriteriaDictionary(binder,
                                                                                                       args));
     var data = dataStrategy.Run.FindOne(table.GetQualifiedName(), criteriaExpression);
     return data != null ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null;
 }
Exemple #6
0
 public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     var result = dataStrategy.Run.Get(table.GetName(), args);
     if (result == null || result.Count == 0) return null;
     return binder.Name.Equals("get", StringComparison.OrdinalIgnoreCase)
                ? new SimpleRecord(result, table.GetQualifiedName(), dataStrategy)
                : result.First().Value;
 }
 public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args));
     var data = dataStrategy.Find(table.GetQualifiedName(), criteria);
     return new SimpleResultSet(data != null
                  ? data.Select(dict => new SimpleRecord(dict, table.GetQualifiedName(), dataStrategy))
                  : Enumerable.Empty<SimpleRecord>());
 }
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The data strategy.</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            var criteriaDictionary = ArgumentHelper.CreateCriteriaDictionary(binder, args, "ExistsBy", "exists_by", "AnyBy", "any_by");
            if (criteriaDictionary == null) return null;

            var criteria  = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary);
            return new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where(criteria).Exists();
        }
 protected override void loadData()
 {
     var table = new DynamicTable( new EwfTableColumn( "Email", Unit.Percentage( 50 ) ), new EwfTableColumn( "Role", Unit.Percentage( 50 ) ) );
     table.AddActionLink( new ActionButtonSetup( "Create User", new EwfLink( new EditUser.Info( es.info, null ) ) ) );
     foreach( var user in UserManagementStatics.GetUsers() )
         table.AddTextRow( new RowSetup { ClickScript = ClickScript.CreateRedirectScript( new EditUser.Info( es.info, user.UserId ) ) }, user.Email, user.Role.Name );
     ph.AddControlsReturnThis( table );
 }
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The database or transaction</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (args.Length == 1 && args[0] is SimpleExpression)
            {
                return new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where((SimpleExpression)args[0]);
            }

            throw new BadExpressionException("FindAll only accepts a criteria expression.");
        }
        public void Find_Each_Accepts_Action_Argument()
        {
            var table = new DynamicTable("Users");

            var result = table.FindEach(x =>
            {

            });
        }
        private static SimpleExpression GetCriteriaExpression(InvokeMemberBinder binder, object[] args, DynamicTable table)
        {
            var criteria = binder.Name.Equals("delete", StringComparison.InvariantCultureIgnoreCase) ?
                                                                                                         binder.NamedArgumentsToDictionary(args)
                               :
                                   MethodNameParser.ParseFromBinder(binder, args);

            return ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteria);
        }
Exemple #13
0
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The database or transaction</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (args.Length == 1 && args[0] is SimpleExpression)
            {
                return new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where((SimpleExpression)args[0]);
            }

            return null;
        }
        private static object UpdateUsingKeys(DataStrategy dataStrategy, DynamicTable table, object[] args)
        {
            var record = ObjectToDictionary(args[0]);
            var list = record as IList<IDictionary<string, object>>;
            if (list != null) return dataStrategy.UpdateMany(table.GetQualifiedName(), list);

            var dict = record as IDictionary<string, object>;
            return dataStrategy.Update(table.GetQualifiedName(), dict);
        }
Exemple #15
0
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The database (or transaction)</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (args.Length == 1 && args[0] is SimpleExpression)
            {
                var data = dataStrategy.Run.FindOne(table.GetQualifiedName(), (SimpleExpression)args[0]);
                return data != null ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null;
            }

            throw new BadExpressionException("Find only accepts a criteria expression.");
        }
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The database (or transaction)</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (args.Length == 1 && args[0] is SimpleExpression)
            {
                var data = dataStrategy.FindOne(table.GetQualifiedName(), (SimpleExpression)args[0]);
                return data != null ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null;
            }

            return null;
        }
        public static object TypeResult(object result, DynamicTable table, DataStrategy dataStrategy)
        {
            var dictionary = result as IDictionary<string, object>;
            if (dictionary != null) return dictionary.ToDynamicRecord(table.GetQualifiedName(), dataStrategy);

            var list = result as IEnumerable<IDictionary<string, object>>;
            if (list != null) return new SimpleResultSet(list.Select(d => d.ToDynamicRecord(table.GetQualifiedName(), dataStrategy)));

            return null;
        }
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            var criteria = args.OfType<SimpleExpression>().SingleOrDefault() ?? new SimpleEmptyExpression();

            var data = binder.NamedArgumentsToDictionary(args).Where(kv=>!(kv.Value is SimpleExpression)).ToDictionary();

            var updatedCount = dataStrategy.Update(table.GetQualifiedName(), data, criteria);
            
            return updatedCount.ResultSetFromModifiedRowCount();
        }
        public void Paged_IsValid_Method_OnTable()
        {
            IDynamicTable table = new DynamicTable("Users");

            var query = table.Paged(pageSize: 20, currentPage: 1);

            Assert.IsNotNull(query);
            Assert.AreEqual(query.PageSize, 20);
            Assert.AreEqual(query.CurrentPage, 1);
        }
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (args.Length != 1) throw new ArgumentException("Incorrect number of arguments to Update method.");

            var record = ObjectToDictionary(args[0]);
            var list = record as IList<IDictionary<string, object>>;
            if (list != null) return dataStrategy.UpdateMany(table.GetQualifiedName(), list);

            var dict = record as IDictionary<string, object>;
            return dataStrategy.Update(table.GetQualifiedName(), dict);
        }
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (args.Length != 1) throw new ArgumentException("Incorrect number of arguments to Update method.");
            var keyFieldNames = dataStrategy.Adapter.GetKeyFieldNames(table.GetQualifiedName()).ToArray();
            if (keyFieldNames.Length == 0)
            {
                throw new NotSupportedException("Adapter does not support key-based update for this object.");
            }

            return UpdateByKeyFields(table.GetQualifiedName(), dataStrategy, args[0], keyFieldNames);
        }
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (args.Length == 0 || args.Length > 2) throw new ArgumentException("Incorrect number of arguments to Update method.");

            if (args.Length == 1)
            {
                return UpdateUsingKeys(dataStrategy, table, args);
            }

            return UpdateUsingOriginalValues(dataStrategy, table, args);
        }
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The data strategy.</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            var query = new SimpleQuery(dataStrategy.GetAdapter(), table.GetQualifiedName());

            if (args.Length == 1 && args[0] is SimpleExpression)
            {
                query = query.Where((SimpleExpression)args[0]);
            }

            return query.Count();
        }
        public void PropertyShouldReturnDynamicReference()
        {
            //Arrange
            dynamic table = new DynamicTable("Test", null);

            // Act
            DynamicReference column = table.TestColumn;

            // Assert
            Assert.AreEqual("Test", column.Owner.Name);
            Assert.AreEqual("TestColumn", column.Name);
        }
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            var result = DoInsert(binder, args, dataStrategy, table.GetQualifiedName());
            
            var dictionary = result as IDictionary<string,object>;
            if (dictionary != null) return dictionary.ToDynamicRecord(table.GetQualifiedName(), dataStrategy);

            var list = result as IEnumerable<IDictionary<string, object>>;
            if (list != null) return list.Select(d => d.ToDynamicRecord(table.GetQualifiedName(), dataStrategy));

            return null;
        }
Exemple #26
0
		public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
		{
			SimpleExpression criteriaExpression = null;
			if (args.Length == 1 && args[0] is SimpleExpression)
			{
				criteriaExpression = args[0] as SimpleExpression;
			}

			var columName = binder.Name.Substring(3);
			var data = dataStrategy.Max(table.GetQualifiedName(), columName, criteriaExpression);
			return data;
		}
Exemple #27
0
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The database or transaction</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (args.Length == 1 && args[0] is SimpleExpression)
            {
                var data = dataStrategy.Find(table.GetQualifiedName(), (SimpleExpression)args[0]);
                return new SimpleResultSet(data != null
                             ? data.Select(dict => new SimpleRecord(dict, table.GetQualifiedName(), dataStrategy))
                             : Enumerable.Empty<SimpleRecord>());
            }

            return null;
        }
Exemple #28
0
 public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     var func = dataStrategy.GetAdapter().OptimizingDelegateFactory.CreateGetDelegate(dataStrategy.GetAdapter(),
                                                                                  table.GetName(), args);
         return a =>
                    {
                        var data = func(a);
                        return (data != null && data.Count > 0)
                                   ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy)
                                   : null;
                    };
 }
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The data strategy.</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            if (binder.Name.Equals("GetCountBy") || binder.Name.Equals("get_count_by"))
            {
                ArgumentHelper.CheckFindArgs(args, binder);
            }

            var criteriaDictionary = ArgumentHelper.CreateCriteriaDictionary(binder, args, "GetCountBy", "get_count_by");
            var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(),
                                                                                                  criteriaDictionary);
            return new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where(criteria).Count();
        }
Exemple #30
0
 public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args));
     try
     {
         var func = dataStrategy.Adapter.CreateFindOneDelegate(table.GetQualifiedName(), criteriaExpression);
         return a => new SimpleRecord(func(a), table.GetQualifiedName(), dataStrategy);
     }
     catch (NotImplementedException)
     {
         return null;
     }
 }
Exemple #31
0
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The data strategy.</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            var query = new SimpleQuery(dataStrategy, table.GetQualifiedName());

            if (args.Length == 1)
            {
                var expression = args[0] as SimpleExpression;
                if (expression != null)
                {
                    return(query.Where(expression).Count());
                }
                else
                {
                    throw new BadExpressionException("GetCount expects an expression or no parameters.");
                }
            }
            else if (args.Length == 0)
            {
                return(query.Count());
            }

            throw new ArgumentException("GetCount expects an expression or no parameters.");
        }
Exemple #32
0
        public void C31_first_request()
        {
            var hex     = "8286 8441 0f77 7777 2e65 7861 6d70 6c65 2e63 6f6d";
            var buffer  = HexToBytes(hex);
            var offset  = 0;
            var count   = buffer.Length;
            var table   = new DynamicTable();
            var headers = new List <IndexedHeader>();

            var decoder = new Decoder(table);

            decoder.HeaderDecoded += (sender, args) => { headers.Add(new IndexedHeader(args.Name, args.Value)); };
            decoder.Decode(buffer, ref offset, ref count);

            headers[0].Name.Should().Be(":method");
            headers[0].Value.Should().Be("GET");
            headers[1].Name.Should().Be(":scheme");
            headers[1].Value.Should().Be("http");
            headers[2].Name.Should().Be(":path");
            headers[2].Value.Should().Be("/");
            headers[3].Name.Should().Be(":authority");
            headers[3].Value.Should().Be("www.example.com");
        }
Exemple #33
0
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The data strategy.</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            var query = new SimpleQuery(dataStrategy, table.GetQualifiedName());

            if (args.Length == 1)
            {
                var criteria = args[0] as SimpleExpression;
                if (criteria != null)
                {
                    query = query.Where(criteria);
                }
                else
                {
                    throw new BadExpressionException(binder.Name + " requires an expression.");
                }
            }
            else if (args.Length != 0)
            {
                throw new BadExpressionException(binder.Name + " requires an expression.");
            }

            return(query.Exists());
        }
Exemple #34
0
        public TableSymbol MakeNullableIfPossible()
        {
            var symbol = new TableSymbol();
            var compundTableColumns = new List <ISchemaColumn>();

            foreach (var column in _fullTable.Columns)
            {
                compundTableColumns.Add(ConvertColumnToNullable(column));
            }

            foreach (var item in _tables)
            {
                var dynamicTable = new DynamicTable(item.Value.Item2.Columns.Select(c => ConvertColumnToNullable(c)).ToArray());
                symbol._tables.Add(item.Key, new Tuple <ISchema, ISchemaTable>(item.Value.Item1, dynamicTable));
                symbol._orders.Add(item.Key);
            }

            symbol._fullTableName = symbol._orders.Aggregate((a, b) => a + b);
            symbol._fullTable     = new DynamicTable(compundTableColumns.ToArray());
            symbol._fullSchema    = new TransitionSchema(symbol._fullTableName, symbol._fullTable);

            return(symbol);
        }
        public DynamicTable ExecuteDynamicTable(SqlStatement sql)
        {
            var table = new DynamicTable();

            ExecuteDataReader(sql, dr =>
            {
                while (dr.Read())
                {
                    if (table.NeedInit)
                    {
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            table.AddKey(dr.GetName(i), i);
                        }
                        table.NeedInit = false;
                    }
                    var row  = table.NewRow();
                    var cols = new object[dr.FieldCount];
                    dr.GetValues(cols);
                    row.AppendMemberRange(cols);
                }
            });
            return(table);
        }
Exemple #36
0
        public static StatisticRow CreateTotalRow(Table output, int num, DynamicTable dynaTable, int maxWidth, int _baseColor, int _deltaColor)
        {
            StatisticRow sr = new StatisticRow();

            sr.GroupLevel    = -1;
            sr.GroupField    = -1;
            sr.groupNum      = num;
            sr.outputTable   = output;
            sr.dynamicTable  = dynaTable;
            sr.maxFieldWidth = maxWidth;

            sr.baseColor = _baseColor;
            int dh = (int)(((uint)(_deltaColor & 0x00FF0000)) >> 16);
            int ds = (int)(((uint)(_deltaColor & 0x0000FF00)) >> 8);
            int dl = (int)(((uint)(_deltaColor & 0x000000FF)));

            dh        = dh > 127 ? 127 - dh : dh;
            ds        = ds > 127 ? 127 - ds : ds;
            dl        = dl > 127 ? 127 - dl : dl;
            sr.deltaH = dh;
            sr.deltaS = ds;
            sr.deltaL = dl;
            return(sr);
        }
Exemple #37
0
        public void DynamicTable_Resize_Success(int initialMaxSize, int finalMaxSize, int insertSize)
        {
            // This is purely to make it simple to perfectly reach our initial max size to test growing a full but non-wrapping buffer.
            Debug.Assert((insertSize % 64) == 0, $"{nameof(insertSize)} must be a multiple of 64 ({nameof(HeaderField)}.{nameof(HeaderField.RfcOverhead)} * 2)");

            DynamicTable dynamicTable = new DynamicTable(maxSize: initialMaxSize);
            int          insertedSize = 0;

            while (insertedSize != insertSize)
            {
                byte[] data = Encoding.ASCII.GetBytes($"header-{dynamicTable.Size}".PadRight(16, ' '));
                Debug.Assert(data.Length == 16);

                dynamicTable.Insert(data, data);
                insertedSize += data.Length * 2 + HeaderField.RfcOverhead;
            }

            List <HeaderField> headers = new List <HeaderField>();

            for (int i = 0; i < dynamicTable.Count; ++i)
            {
                headers.Add(dynamicTable[i]);
            }

            dynamicTable.Resize(finalMaxSize);

            int expectedCount = Math.Min(finalMaxSize / 64, headers.Count);

            Assert.Equal(expectedCount, dynamicTable.Count);

            for (int i = 0; i < dynamicTable.Count; ++i)
            {
                Assert.True(headers[i].Name.AsSpan().SequenceEqual(dynamicTable[i].Name));
                Assert.True(headers[i].Value.AsSpan().SequenceEqual(dynamicTable[i].Value));
            }
        }
        public void Visit(SchemaFromNode node)
        {
            var schema = _provider.GetSchema(node.Schema);

            ISchemaTable table;

            if (_currentScope.Name != "Desc")
            {
                table = schema.GetTableByName(node.Method, _schemaFromArgs.ToArray());
            }
            else
            {
                table = new DynamicTable(new ISchemaColumn[0]);
            }

            _schemaFromArgs.Clear();

            AddAssembly(schema.GetType().Assembly);

            _queryAlias = StringHelpers.CreateAliasIfEmpty(node.Alias, _generatedAliases);
            _generatedAliases.Add(_queryAlias);

            var tableSymbol = new TableSymbol(_queryAlias, schema, table, !string.IsNullOrEmpty(node.Alias));

            _currentScope.ScopeSymbolTable.AddSymbol(_queryAlias, tableSymbol);
            _currentScope[node.Id] = _queryAlias;

            var aliasedSchemaFromNode = new SchemaFromNode(node.Schema, node.Method, (ArgsListNode)Nodes.Pop(), _queryAlias);

            if (!InferredColumns.ContainsKey(aliasedSchemaFromNode))
            {
                InferredColumns.Add(aliasedSchemaFromNode, table.Columns);
            }

            Nodes.Push(aliasedSchemaFromNode);
        }
Exemple #39
0
        private static object UpdateUsingOriginalValues(DataStrategy dataStrategy, DynamicTable table, object[] args)
        {
            var newValues     = ObjectToDictionary(args[0]);
            var newValuesList = newValues as IList <IDictionary <string, object> >;

            if (newValuesList != null)
            {
                var originalValuesList = ObjectToDictionary(args[1]) as IList <IDictionary <string, object> >;
                if (originalValuesList == null)
                {
                    throw new InvalidOperationException("Parameter type mismatch; both parameters to Update should be same type.");
                }
                return(dataStrategy.UpdateMany(table.GetQualifiedName(), newValuesList, originalValuesList));
            }

            var newValuesDict      = newValues as IDictionary <string, object>;
            var originalValuesDict = ObjectToDictionary(args[1]) as IDictionary <string, object>;

            if (originalValuesDict == null)
            {
                throw new InvalidOperationException("Parameter type mismatch; both parameters to Update should be same type.");
            }
            return(dataStrategy.Update(table.GetQualifiedName(), newValuesDict, originalValuesDict));
        }
 public HPackDecoderTest()
 {
     _dynamicTable = new DynamicTable(DynamicTableInitialMaxSize);
     _decoder      = new HPackDecoder(DynamicTableInitialMaxSize, maxResponseHeadersLength: 4096, dynamicTable: _dynamicTable);
 }
Exemple #41
0
 /// <summary>
 /// Executes the command.
 /// </summary>
 /// <param name="database">The database.</param>
 /// <param name="table"></param>
 /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
 /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
 /// <returns></returns>
 public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     return(new SimpleResultSet(dataStrategy.Find(table.GetQualifiedName(), null)
                                .Select(dict => new SimpleRecord(dict, table.GetQualifiedName(), dataStrategy))));
 }
Exemple #42
0
 internal override void SetParent(DynamicTable table)
 {
     SetLayout(table != null ? table.layout : null);
 }
        private static SimpleExpression GetCriteriaExpression(InvokeMemberBinder binder, object[] args, DynamicTable table)
        {
            IDictionary <string, object> criteria;

            if (binder.Name.Equals("delete", StringComparison.InvariantCultureIgnoreCase))
            {
                criteria = binder.NamedArgumentsToDictionary(args);
                if (criteria.Count == 0 && args.Length == 1)
                {
                    criteria = args[0] as IDictionary <string, object> ?? args[0].ObjectToDictionary();
                }
            }
            else
            {
                criteria = MethodNameParser.ParseFromBinder(binder, args);
            }

            if (criteria.Count == 0)
            {
                throw new InvalidOperationException("No criteria specified for Delete. To delete all data, use DeleteAll().");
            }

            return(ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteria));
        }
        public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            object     instance;
            JContainer container;

            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }
            if (reader.TokenType == JsonToken.StartArray)
            {
                container = JArray.Load(reader);
                if (objectType == typeof(DynamicRow))
                {
                    var dynamicRow = new DynamicRow();
                    instance = dynamicRow;
                    serializer.Populate(container.CreateReader(), dynamicRow.Items);
                }
                else if (objectType == typeof(DynamicItem))
                {
                    var dynamicTable = new DynamicTable();
                    instance = dynamicTable;
                    serializer.Populate(container.CreateReader(), dynamicTable.Rows);
                }
                else
                {
                    throw new EtoException("Invalid object graph");
                }
            }
            else
            {
                container = JObject.Load(reader);
                if (container["$type"] == null)
                {
                    if (container["Rows"] != null)
                    {
                        instance = new DynamicTable();
                    }
                    else if (container["Control"] != null)
                    {
                        instance = new DynamicControl();
                    }
                    else
                    {
                        throw new EtoException("Could not infer the type of object to create");
                    }

                    serializer.Populate(container.CreateReader(), instance);
                }
                else
                {
                    var type = Type.GetType((string)container ["$type"]);
                    if (!typeof(DynamicItem).IsAssignableFrom(type))
                    {
                        var dynamicControl = new DynamicControl();
                        dynamicControl.Control = serializer.Deserialize(container.CreateReader()) as Control;
                        instance = dynamicControl;
                    }
                    else
                    {
                        instance = serializer.Deserialize(container.CreateReader());
                    }
                }
            }
            if (objectType == typeof(DynamicRow) && instance.GetType() != typeof(DynamicRow))
            {
                var row = new DynamicRow();
                row.Items.Add(instance as DynamicItem);
                return(row);
            }

            return(instance);
        }
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            SimpleExpression criteriaExpression = GetCriteriaExpression(binder, args, table);

            return(dataStrategy.Delete(table.GetQualifiedName(), criteriaExpression));
        }
Exemple #46
0
 private void OnDynamicTableCapacity(int dynamicTableSize)
 {
     // Call Decoder to update the table size.
     DynamicTable.Resize(dynamicTableSize);
     _state = State.Ready;
 }
Exemple #47
0
 public HPackDecoderTest()
 {
     _dynamicTable = new DynamicTable(DynamicTableInitialMaxSize);
     _decoder      = new HPackDecoder(DynamicTableInitialMaxSize, _dynamicTable);
 }
Exemple #48
0
        public void ExportAndImport_XML()
        {
            IDynamicTable table = new DynamicTable(DynamicTableType.Expandable);
            dynamic       row;
            string        xmlExport;

            string fileName = _assemblyDirectory + @"\CsvTest.xml";

            //add values
            row           = new ExpandoObject();
            row.FirstName = "Hans";
            row.LastName  = "Mueller";
            row.Age       = 30;
            row.TimeStamp = new DateTime(2012, 12, 24, 1, 2, 3);
            table.AddRow(row);

            row          = new ExpandoObject();
            row.LastName = "Meier";
            row.Street   = "Main street";
            table.AddRow(row);

            //compare
            Assert.AreEqual(2, table.Rows.Count);
            Assert.AreEqual(5, table.Columns.Count);

            //export
            xmlExport = table.AsXml();

            using (StreamWriter writer = new StreamWriter(fileName))
            {
                writer.Write(xmlExport);
            }

            //remove rows
            table.RemoveAllRows();
            Assert.AreEqual(0, table.Rows.Count);
            Assert.AreEqual(5, table.Columns.Count);

            //import
            using (StreamReader reader = new StreamReader(fileName))
            {
                table.FromXml(ReadFile(reader));
            }

            //compare
            row = table.Rows[0];
            Assert.AreEqual("Hans", row.FirstName);
            Assert.AreEqual("Mueller", row.LastName);
            Assert.AreEqual(30, row.Age);

            Assert.AreEqual(2012, row.TimeStamp.Year);
            Assert.AreEqual(12, row.TimeStamp.Month);
            Assert.AreEqual(24, row.TimeStamp.Day);
            Assert.AreEqual(1, row.TimeStamp.Hour);
            Assert.AreEqual(2, row.TimeStamp.Minute);
            Assert.AreEqual(3, row.TimeStamp.Second);

            Assert.AreEqual("", row.Street);

            row = table.Rows[1];
            Assert.AreEqual("", row.FirstName);
            Assert.AreEqual("Meier", row.LastName);
            Assert.AreEqual(0, row.Age);
            Assert.AreEqual(0, row.TimeStamp.Ticks);
            Assert.AreEqual("Main street", row.Street);
        }
Exemple #49
0
 public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     return(DoInsert(binder, args, dataStrategy, table.GetQualifiedName()).ToDynamicRecord(table.GetQualifiedName(), dataStrategy));
 }
Exemple #50
0
        static void Main(string[] args)
        {
            var data = Generate();

            DynamicTable.From(data).Write();
        }
Exemple #51
0
 public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     return(CreateSimpleQuery(table, binder, args, dataStrategy));
 }
        private static SimpleExpression GetCriteriaExpression(InvokeMemberBinder binder, object[] args, DynamicTable table)
        {
            var criteria = binder.Name.Equals("delete", StringComparison.InvariantCultureIgnoreCase) ?
                           binder.NamedArgumentsToDictionary(args)
                               :
                           MethodNameParser.ParseFromBinder(binder, args);

            return(ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteria));
        }
Exemple #53
0
        private static object CreateSimpleQuery(DynamicTable table, InvokeMemberBinder binder, object[] args, DataStrategy dataStrategy)
        {
            var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args));

            return(new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where(criteriaExpression));
        }
Exemple #54
0
        public QueryResult(string sqlstr, DynamicTable dynaTable, string virtualpath, int maxRecord)
        {
            HybridDictionary linkColNames = new HybridDictionary(true);
            DataAccessType   datype       = dynaTable.DAType;
            string           connstr      = dynaTable.ConnectionString;
            IDataAccess      dataAccess   = DataAccessFactory.Produce(datype, connstr);

            dataAccess.CommandTimeout = 600;
            DataTable   dt       = new DataTable("TABLE");
            IDataReader myReader = dataAccess.ExecuteDataReader(sqlstr);

            try
            {
                int ct = myReader.FieldCount;
                for (int i = 0; i < ct; i++)
                {
                    if (dt.Columns.IndexOf(myReader.GetName(i)) != -1)
                    {
                        dt.Columns.Remove(myReader.GetName(i));
                    }

                    if (dynaTable[myReader.GetName(i)] == null)                 //不显示自增长列
                    {
                        continue;
                    }

                    linkColNames[myReader.GetName(i)] = false;

                    Type t = myReader.GetFieldType(i);
                    if (t.IsArray)
                    {
                        dt.Columns.Add(myReader.GetName(i), typeof(string));
                        linkColNames[myReader.GetName(i)] = true;
                    }
                    else
                    {
                        dt.Columns.Add(myReader.GetName(i), t);
                    }
                }
                int num = 0;
                while (myReader.Read() && num < maxRecord)
                {
                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        if (dynaTable[dt.Columns[i].ColumnName] == null)                     //不显示自增长列
                        {
                            continue;
                        }
                        if (!(bool)linkColNames[dt.Columns[i].ColumnName])
                        {
                            dr[dt.Columns[i].ColumnName] = myReader[dt.Columns[i].ColumnName];
                        }
                    }
                    dt.Rows.Add(dr);
                    num++;
                }
            }
            finally
            {
                if (myReader != null)
                {
                    myReader.Close();
                }
            }
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                if ((bool)linkColNames[dt.Columns[i].ColumnName])
                {
                    myReader = dataAccess.ExecuteDataReader(sqlstr, CommandBehavior.SequentialAccess);
                    try
                    {
                        int rowI = 0;
                        int colI = myReader.GetOrdinal(dt.Columns[i].ColumnName);
                        while (myReader.Read() && rowI < maxRecord)
                        {
                            DataRow dr = dt.Rows[rowI];
                            if (myReader.GetFieldType(colI).IsArray)
                            {
                                if (!myReader.IsDBNull(colI))
                                {
                                    long size = myReader.GetBytes(colI, 0, null, 0, 0);
                                    if (size > 0)
                                    {
                                        byte[] content = new byte[size];
                                        myReader.GetBytes(colI, 0, content, 0, (int)size);
                                        dr[dt.Columns[i].ColumnName] = FileField.Content(content, virtualpath);
                                    }
                                    else
                                    {
                                        dr[dt.Columns[i].ColumnName] = null;
                                    }
                                }
                                else
                                {
                                    dr[dt.Columns[i].ColumnName] = null;
                                }
                            }
                            else
                            {
                                dr[dt.Columns[i].ColumnName] = "";
                            }
                            rowI++;
                        }
                    }
                    finally
                    {
                        if (myReader != null)
                        {
                            myReader.Close();
                        }
                    }
                }
            }
            dataTable = dt;
        }
Exemple #55
0
 public HPackDecoderTests()
 {
     _dynamicTable = new DynamicTable(DynamicTableInitialMaxSize);
     _decoder      = new HPackDecoder(DynamicTableInitialMaxSize, MaxRequestHeaderFieldSize, _dynamicTable);
 }
Exemple #56
0
        private long _highestOpenedStreamId; // TODO lock to access
        //private volatile bool _haveSentGoAway;

        public Http3Connection(HttpConnectionContext context)
        {
            Context      = context;
            DynamicTable = new DynamicTable(0);
        }
Exemple #57
0
 public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     return(dataStrategy.GetAdapter().Get(table.GetName(), args));
 }
Exemple #58
0
 /// <summary>
 /// Executes the command.
 /// </summary>
 /// <param name="dataStrategy">The database or transaction.</param>
 /// <param name="table"></param>
 /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
 /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
 /// <returns></returns>
 public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     return(new SimpleQuery(dataStrategy, table.GetQualifiedName()));
 }
Exemple #59
0
 public Func <object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="dataStrategy">The data strategy.</param>
        /// <param name="table"></param>
        /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param>
        /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param>
        /// <returns></returns>
        public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args)
        {
            var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args));

            return(new SimpleQuery(dataStrategy.GetAdapter(), table.GetQualifiedName()).Where(criteria).Count());
        }