protected override DataTable FillDbData(TkDbContext context, DataSet dataSet) { using (SqlSelector selector = new SqlSelector(context, dataSet)) { TableSchemeData data = new TableSchemeData(context, Scheme); ParamBuilderContainer container = new ParamBuilderContainer(); if (FilterSql != null) { string filter = Expression.Execute(FilterSql, selector); container.Add(filter); } container.Add(CreateActiveFilter(context)); string tableName = Scheme.TableName; string sql = string.Format(ObjectUtil.SysCulture, "SELECT {0} FROM {1}", data.SelectFields, context.EscapeName(tableName)); string regName = RegName; selector.Select(regName, sql, container, OrderBy); DataTable dataTable = dataSet.Tables[regName]; DataColumn idColumn = dataTable.Columns[fDisplay.Id.NickName]; idColumn.ColumnName = DecoderConst.CODE_NICK_NAME; dataTable.Columns[fDisplay.Name.NickName].ColumnName = DecoderConst.NAME_NICK_NAME; if (NameExpression != "{Name}") { foreach (DataRow row in dataTable.Rows) { row[DecoderConst.NAME_NICK_NAME] = InternalExpression.Execute(row); } } return(dataTable); } }
public ExpressionTree(string rule) { // strip all spaces rule = rule.Replace(" ", ""); int p = 0; exp = new InternalExpression(rule, ref p); }
internal SqlNode TranslateLink(SqlLink link, List <SqlExpression> keyExpressions, bool asExpression) { MetaDataMember mm = link.Member; if (mm.IsAssociation) { // Create the row source. MetaType otherType = mm.Association.OtherType; Type tableType = otherType.InheritanceRoot.Type; ITable table = this.services.Context.GetTable(tableType); Expression source = new LinkedTableExpression(link, table, typeof(IQueryable <>).MakeGenericType(otherType.Type)); // Build key expression nodes. Expression[] keyExprs = new Expression[keyExpressions.Count]; for (int i = 0; i < keyExpressions.Count; ++i) { MetaDataMember metaMember = mm.Association.OtherKey[i]; Type memberType = TypeSystem.GetMemberType(metaMember.Member); keyExprs[i] = InternalExpression.Known(keyExpressions[i], memberType); } Expression lex = link.Expression != null ? (Expression)InternalExpression.Known(link.Expression) : (Expression)Expression.Constant(null, link.Member.Member.DeclaringType); Expression expr = TranslateAssociation(this.services.Context, mm.Association, source, keyExprs, lex); // Convert QueryConverter qc = new QueryConverter(this.services, this.typeProvider, this, this.sql); SqlSelect sel = (SqlSelect)qc.ConvertInner(expr, link.SourceExpression); // Turn it into an expression is necessary SqlNode result = sel; if (asExpression) { if (mm.Association.IsMany) { result = new SqlSubSelect(SqlNodeType.Multiset, link.ClrType, link.SqlType, sel); } else { result = new SqlSubSelect(SqlNodeType.Element, link.ClrType, link.SqlType, sel); } } return(result); } else { System.Diagnostics.Debug.Assert(link.Expansion != null); System.Diagnostics.Debug.Assert(link.KeyExpressions == keyExpressions); // deferred expression already defined... return(link.Expansion); } }
public SubExpression(string rule, ref int p) { if (rule[p] == '(') { isNode = false; p++; sub = new InternalExpression(rule, ref p); p++; // to consume the closing ) } else { isNode = true; factor = ""; do { factor += rule[p]; p++; } while (p < rule.Length && rule[p] != ')' && rule[p] != '+' && rule[p] != '*'); } }
protected override void Visit(InternalExpression node) { Visit((Expression)node); }
protected virtual void Visit(InternalExpression node) { }