private void VisitEqual(BinaryExpression expression)
        {
            QueryText.Append(((MemberExpression)expression.Left).Member.Name).Append(":");
            QueryText.Append(TransformToEqualValue(GetValueFromExpression(expression.Right)));

            QueryText.Append(" ");
        }
Beispiel #2
0
 internal string CreateBulkInsertStatementWithParameter(ITableData data, string tableName, List <OdbcParameter> parameters)
 {
     QueryText.Clear();
     TableName = tableName;
     GetSourceAndDestColumnNames(data);
     AppendBeginSql(tableName);
     while (data.Read())
     {
         QueryText.Append("(");
         string[] placeholder = new string[DestColumnNames.Count];
         QueryText.Append(string.Join(",", placeholder.Select(s => s + "?")));
         QueryText.AppendLine(")");
         foreach (string destColumnName in DestColumnNames)
         {
             int    colIndex     = data.GetOrdinal(destColumnName);
             string dataTypeName = data.GetDataTypeName(colIndex);
             if (data.IsDBNull(colIndex))
             {
                 parameters.Add(new OdbcParameter(destColumnName, DBNull.Value));
             }
             else
             {
                 parameters.Add(new OdbcParameter(destColumnName, data.GetValue(colIndex)));
             }
         }
         if (data.NextResult())
         {
             QueryText.Append(",");
         }
     }
     AppendEndSql();
     return(QueryText.ToString());
 }
        private void VisitOrElse(BinaryExpression orElse)
        {
            VisitExpression(orElse.Left);

            QueryText.Append("OR ");

            VisitExpression(orElse.Right);
        }
        private void VisitAndAlso(BinaryExpression andAlso)
        {
            VisitExpression(andAlso.Left);

            QueryText.Append("AND ");

            VisitExpression(andAlso.Right);
        }
        private void VisitLessThanOrEqual(BinaryExpression expression)
        {
            object value = GetValueFromExpression(expression.Right);

            QueryText.Append(
                GetFieldNameForRangeQuery(expression.Left, value)
                ).Append(":{NULL TO ");
            QueryText.Append(TransformToRangeValue(GetValueFromExpression(expression.Right)));

            QueryText.Append("} ");
        }
        private void VisitGreaterThan(BinaryExpression expression)
        {
            object value = GetValueFromExpression(expression.Right);

            QueryText.Append(
                GetFieldNameForRangeQuery(expression.Left, value)
                ).Append(":[");
            QueryText.Append(TransformToRangeValue(value));

            QueryText.Append(" TO NULL] ");
        }
 private void AppendValueListSql(List<string> values, bool lastItem)
 {
     if (IsAccessDatabase)
     {
         QueryText.AppendLine("SELECT " + string.Join(",", values) + $"  FROM {AccessDummyTableName} ");
         if (lastItem) QueryText.AppendLine(" UNION ALL ");
     }
     else
     {
         QueryText.Append("(" + string.Join(",", values) + $")");
         if (lastItem) QueryText.AppendLine(",");
     }
 }
Beispiel #8
0
        public void VisitUpsertClause(UpsertClause upsertClause, QueryModel queryModel)
        {
            QueryText.Append(" upsert ");
            GetAqlExpression(upsertClause.SearchSelector, queryModel);

            QueryText.Append(" insert ");
            GetAqlExpression(upsertClause.InsertSelector, queryModel);

            QueryText.Append(" update ");
            GetAqlExpression(upsertClause.UpdateSelector, queryModel);

            QueryText.AppendFormat(" in {0} ", LinqUtility.ResolveCollectionName(Db, upsertClause.CollectionType));
        }
Beispiel #9
0
        public override void VisitOrderByClause(OrderByClause orderByClause, QueryModel queryModel, int index)
        {
            QueryText.Append(" sort ");
            for (int i = 0; i < orderByClause.Orderings.Count; i++)
            {
                GetAqlExpression(orderByClause.Orderings[i].Expression, queryModel);
                QueryText.AppendFormat(" {0} {1} ",
                                       orderByClause.Orderings[i].OrderingDirection == OrderingDirection.Asc ? "asc" : "desc",
                                       i != orderByClause.Orderings.Count - 1 ? " , " : string.Empty);
            }

            base.VisitOrderByClause(orderByClause, queryModel, index);
        }
Beispiel #10
0
        public void VisitInsertClause(InsertClause insertClause, QueryModel queryModel)
        {
            if (insertClause.WithSelector != null)
            {
                QueryText.Append(" insert ");

                GetAqlExpression(insertClause.WithSelector, queryModel);
            }
            else
            {
                QueryText.AppendFormat(" insert {0} ", LinqUtility.ResolvePropertyName(insertClause.ItemName));
            }

            QueryText.AppendFormat(" in {0} ", LinqUtility.ResolveCollectionName(Db, insertClause.CollectionType));
        }
Beispiel #11
0
        public void VisitRemoveClause(RemoveClause removeClause, QueryModel queryModel)
        {
            if (removeClause.KeySelector != null)
            {
                QueryText.Append(" remove ");

                GetAqlExpression(removeClause.KeySelector, queryModel);
            }
            else
            {
                QueryText.AppendFormat(" remove {0} ", LinqUtility.ResolvePropertyName(removeClause.ItemName));
            }

            QueryText.AppendFormat(" in {0} ", LinqUtility.ResolveCollectionName(Db, removeClause.CollectionType));
        }
Beispiel #12
0
        public override void VisitQueryModel(QueryModel queryModel)
        {
            if (DefaultAssociatedIdentifier != null)
            {
                queryModel.MainFromClause.ItemName = DefaultAssociatedIdentifier;
            }

            this.QueryModel = queryModel;

            var resultOperator    = queryModel.ResultOperators.Count != 0 ? queryModel.ResultOperators[0] : null;
            var aggregateFunction = resultOperator != null && aggregateResultOperatorFunctions.ContainsKey(resultOperator.GetType())
                ? aggregateResultOperatorFunctions[resultOperator.GetType()] : null;

            if (resultOperator is FirstResultOperator || resultOperator is SingleResultOperator)
            {
                queryModel.BodyClauses.Add(new SkipTakeClause(Expression.Constant(0), Expression.Constant(1)));
            }

            if (aggregateFunction != null)
            {
                QueryText.AppendFormat(" return {0} (( ", aggregateFunction);
            }

            if (!IgnoreFromClause && queryModel.MainFromClause.ItemType != typeof(AQL))
            {
                queryModel.MainFromClause.Accept(this, queryModel);
            }

            VisitBodyClauses(queryModel.BodyClauses, queryModel);

            if (CrudState.ModelVisitorHaveCrudOperation)
            {
                QueryText.AppendFormat(" in {0} ", CrudState.Collection);
                if (CrudState.ReturnResult)
                {
                    QueryText.AppendFormat(" let crudResult = {0} return crudResult ", CrudState.ReturnResultKind);
                }
            }
            else if (!DontReturn)
            {
                queryModel.SelectClause.Accept(this, queryModel);
            }

            if (aggregateFunction != null)
            {
                QueryText.Append(" )) ");
            }
        }
Beispiel #13
0
        public void VisitUpsertAndReturnClause(UpsertAndReturnClause upsertAndReturnClause, QueryModel queryModel)
        {
            QueryText.Append(" upsert ");
            GetAqlExpression(upsertAndReturnClause.SearchSelector, queryModel);

            QueryText.Append(" insert ");
            GetAqlExpression(upsertAndReturnClause.InsertSelector, queryModel);

            QueryText.Append(" update ");
            GetAqlExpression(upsertAndReturnClause.UpdateSelector, queryModel);

            CrudState.ModelVisitorHaveCrudOperation = true;
            CrudState.Collection       = LinqUtility.ResolveCollectionName(Db, upsertAndReturnClause.CollectionType);
            CrudState.ReturnResult     = upsertAndReturnClause.ReturnResult;
            CrudState.ReturnResultKind = "NEW";
        }
Beispiel #14
0
        public void VisitRemoveAndReturnClause(RemoveAndReturnClause removeAndReturnClause, QueryModel queryModel)
        {
            if (removeAndReturnClause.KeySelector != null)
            {
                QueryText.Append(" remove ");

                GetAqlExpression(removeAndReturnClause.KeySelector, queryModel);
            }
            else
            {
                QueryText.AppendFormat(" remove {0} ", LinqUtility.ResolvePropertyName(removeAndReturnClause.ItemName));
            }

            CrudState.ModelVisitorHaveCrudOperation = true;
            CrudState.Collection       = LinqUtility.ResolveCollectionName(Db, removeAndReturnClause.CollectionType);
            CrudState.ReturnResult     = removeAndReturnClause.ReturnResult;
            CrudState.ReturnResultKind = "OLD";
        }
Beispiel #15
0
        public void VisitInsertAndReturnClause(InsertAndReturnClause insertAndReturnClause, QueryModel queryModel)
        {
            if (insertAndReturnClause.WithSelector != null)
            {
                QueryText.Append(" insert ");

                GetAqlExpression(insertAndReturnClause.WithSelector, queryModel);
            }
            else
            {
                QueryText.AppendFormat(" insert {0} ", LinqUtility.ResolvePropertyName(insertAndReturnClause.ItemName));
            }

            CrudState.ModelVisitorHaveCrudOperation = true;
            CrudState.Collection       = LinqUtility.ResolveCollectionName(Db, insertAndReturnClause.CollectionType);
            CrudState.ReturnResult     = insertAndReturnClause.ReturnResult;
            CrudState.ReturnResultKind = "NEW";
        }
Beispiel #16
0
        public void VisitGroupByClause(GroupByClause groupByClause, QueryModel queryModel, int index)
        {
            var parentMVisitor = LinqUtility.FindParentModelVisitor(this);

            parentMVisitor.GroupByNameCounter++;
            groupByClause.IntoName          = "C" + parentMVisitor.GroupByNameCounter;
            groupByClause.FuncIntoName      = Db.Setting.Linq.TranslateGroupByIntoName;
            groupByClause.FromParameterName = queryModel.MainFromClause.ItemName;

            QueryText.Append(" collect ");

            if (groupByClause.Selector.NodeType != ExpressionType.New)
            {
                groupByClause.CollectVariableName = "CV" + parentMVisitor.GroupByNameCounter;
                QueryText.AppendFormat(" {0} = ", LinqUtility.ResolvePropertyName(groupByClause.CollectVariableName));
            }

            GetAqlExpression(groupByClause.Selector, queryModel, true);

            QueryText.AppendFormat(" into {0} ", LinqUtility.ResolvePropertyName(groupByClause.TranslateIntoName()));

            groupByClause.Visited = true;
        }
Beispiel #17
0
 private void AppendValueListSql(List <string> values, bool lastItem)
 {
     if (IsAccessDatabase)
     {
         QueryText.AppendLine("SELECT " + string.Join(",", values) + $"  FROM {AccessDummyTableName} ");
         if (lastItem)
         {
             QueryText.AppendLine(" UNION ALL ");
         }
     }
     else if (ConnectionType == ConnectionManagerType.Oracle)
     {
         QueryText.Append("SELECT ");
         for (int i = 0; i < values.Count; i++)
         {
             QueryText.Append($"{values[i]} {QB}{DestColumnNames[i]}{QE}");
             if (i + 1 < values.Count)
             {
                 QueryText.Append(",");
             }
         }
         QueryText.AppendLine(" FROM DUAL");
         if (lastItem)
         {
             QueryText.AppendLine(" UNION ALL ");
         }
     }
     else
     {
         QueryText.Append("(" + string.Join(",", values) + $")");
         if (lastItem)
         {
             QueryText.AppendLine(",");
         }
     }
 }
Beispiel #18
0
 public override void VisitWhereClause(WhereClause whereClause, QueryModel queryModel, int index)
 {
     QueryText.Append(" filter ");
     GetAqlExpression(whereClause.Predicate, queryModel);
 }
Beispiel #19
0
 public void VisitFilterClause(FilterClause filterClause, QueryModel queryModel, int index)
 {
     QueryText.Append(" filter ");
     GetAqlExpression(filterClause.Predicate, queryModel);
 }
Beispiel #20
0
 public override void VisitSelectClause(SelectClause selectClause, QueryModel queryModel)
 {
     QueryText.Append(" return ");
     GetAqlExpression(selectClause.Selector, queryModel);
 }
Beispiel #21
0
        public void VisitTraversalClause(ITraversalClause traversalClause, QueryModel queryModel, int index)
        {
            string prefix = LinqUtility.MemberNameFromMap(traversalClause.Identifier, "graph", this);

            if (traversalClause.TargetVertex != null)
            {
                QueryText.AppendFormat(" for {0}, {1} in ",
                                       LinqUtility.ResolvePropertyName($"{prefix}_Vertex"),
                                       LinqUtility.ResolvePropertyName($"{prefix}_Edge"));
            }
            else
            {
                QueryText.AppendFormat(" for {0}, {1}, {2} in ",
                                       LinqUtility.ResolvePropertyName($"{prefix}_Vertex"),
                                       LinqUtility.ResolvePropertyName($"{prefix}_Edge"),
                                       LinqUtility.ResolvePropertyName($"{prefix}_Path"));
            }

            if (traversalClause.Min != null && traversalClause.Max != null)
            {
                QueryText.AppendFormat(" {0}..{1} ", traversalClause.Min.Value, traversalClause.Max);
            }

            QueryText.AppendFormat(" {0} ", traversalClause.Direction != null
                ? traversalClause.Direction.Value
                : Utils.EdgeDirectionToString(EdgeDirection.Any));

            if (traversalClause.TargetVertex != null)
            {
                QueryText.Append(" shortest_path ");
                GetAqlExpression(traversalClause.StartVertex, queryModel);
                QueryText.Append(" to ");
                GetAqlExpression(traversalClause.TargetVertex, queryModel);
            }
            else
            {
                GetAqlExpression(traversalClause.StartVertex, queryModel);
            }

            if (string.IsNullOrEmpty(traversalClause.GraphName) == false)
            {
                QueryText.AppendFormat("  graph \"{0}\" ", traversalClause.GraphName);
            }
            else
            {
                StringBuilder edges = new StringBuilder();

                for (int i = 0; i < traversalClause.EdgeCollections.Count; i++)
                {
                    var e = traversalClause.EdgeCollections[i];

                    if (i != 0)
                    {
                        edges.Append(", ");
                    }

                    if (e.Direction.HasValue)
                    {
                        edges.AppendFormat("{0} ", Utils.EdgeDirectionToString(e.Direction.Value));
                    }

                    edges.Append(LinqUtility.ResolvePropertyName(e.CollectionName));
                }

                QueryText.Append(edges);
            }

            if (traversalClause.Options != null)
            {
                QueryText.AppendFormat(" options {0} ", new DocumentSerializer(Db).SerializeWithoutReader(traversalClause.Options.Value));
            }
        }
Beispiel #22
0
        public override void VisitQueryModel(QueryModel queryModel)
        {
            if (DefaultAssociatedIdentifier != null)
            {
                queryModel.MainFromClause.ItemName = DefaultAssociatedIdentifier;
            }

            QueryModel = queryModel;

            string aggregateFunction = null;

            // get the first aggregateResultOperatorFunction, because only one of them can be used at a time
            foreach (var r in queryModel.ResultOperators)
            {
                if (aggregateResultOperatorFunctions.ContainsKey(r.GetType()))
                {
                    aggregateFunction = aggregateResultOperatorFunctions[r.GetType()];
                    break;
                }
            }

            if (queryModel.ResultOperators.Count(x => x is FirstResultOperator) != 0)
            {
                queryModel.BodyClauses.Add(new SkipTakeClause(Expression.Constant(0), Expression.Constant(1)));
            }

            if (queryModel.ResultOperators.Count(x => x is DistinctResultOperator) != 0)
            {
                DistinctResult = true;
            }

            // do not need to apply distinct since it has a single result
            if (string.IsNullOrEmpty(aggregateFunction) == false)
            {
                QueryText.AppendFormat(" return {0} (( ", aggregateFunction);
            }

            if (!IgnoreFromClause && queryModel.MainFromClause.ItemType != typeof(AQL))
            {
                queryModel.MainFromClause.Accept(this, queryModel);
            }

            VisitBodyClauses(queryModel.BodyClauses, queryModel);

            var modificationClause = queryModel.BodyClauses.NextBodyClause <IModificationClause>();

            if (modificationClause != null && modificationClause.IgnoreSelect)
            {
                DontReturn = true;
            }

            if (DontReturn == false)
            {
                queryModel.SelectClause.Accept(this, queryModel);
            }

            if (aggregateFunction != null)
            {
                QueryText.Append(" )) ");
            }
        }