示例#1
0
 private WBooleanExpression CreateBooleanExpression(GremlinVariableProperty variableProperty, object valuesOrPredicate)
 {
     if (valuesOrPredicate is string || valuesOrPredicate is int || valuesOrPredicate is bool)
     {
         WScalarExpression firstExpr  = variableProperty.ToScalarExpression();
         WScalarExpression secondExpr = SqlUtil.GetValueExpr(valuesOrPredicate);
         return(SqlUtil.GetEqualBooleanComparisonExpr(firstExpr, secondExpr));
     }
     if (valuesOrPredicate is Predicate)
     {
         WScalarExpression firstExpr  = variableProperty.ToScalarExpression();
         WScalarExpression secondExpr = SqlUtil.GetValueExpr((valuesOrPredicate as Predicate).Value);
         return(SqlUtil.GetBooleanComparisonExpr(firstExpr, secondExpr, valuesOrPredicate as Predicate));
     }
     throw new ArgumentException();
 }
        public override WTableReference ToTableReference()
        {
            List <WScalarExpression> parameters = new List <WScalarExpression>();

            parameters.Add(SourceVariable.ToScalarExpression());
            parameters.Add(EdgeVariable.ToScalarExpression());
            var secondTableRef = SqlUtil.GetFunctionTableReference(GremlinKeyword.func.DropEdge, parameters, this, GetVariableName());

            return(SqlUtil.GetCrossApplyTableReference(null, secondTableRef));
        }
示例#3
0
        internal List <WSelectElement> GetSelectElement(bool isToCompose1)
        {
            var selectElements = new List <WSelectElement>();

            if (PivotVariable.GetVariableType() == GremlinVariableType.Null)
            {
                selectElements.Add(SqlUtil.GetSelectScalarExpr(SqlUtil.GetStarColumnReferenceExpr(), GremlinKeyword.TableDefaultColumnName));
                return(selectElements);
            }

            if (isToCompose1)
            {
                selectElements.Add(SqlUtil.GetSelectScalarExpr(PivotVariable.ToCompose1(), GremlinKeyword.TableDefaultColumnName));
                return(selectElements);
            }

            foreach (var projectProperty in ProjectedProperties)
            {
                WSelectScalarExpression selectScalarExpr;
                if (projectProperty == GremlinKeyword.Path)
                {
                    selectScalarExpr = SqlUtil.GetSelectScalarExpr(ContextLocalPath.GetDefaultProjection().ToScalarExpression(), GremlinKeyword.Path);
                }
                else if (projectProperty == GremlinKeyword.TableDefaultColumnName)
                {
                    GremlinVariableProperty defaultProjection = PivotVariable.GetDefaultProjection();
                    selectScalarExpr = SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression(), GremlinKeyword.TableDefaultColumnName);
                }
                else if (PivotVariable.ProjectedProperties.Contains(projectProperty))
                {
                    WScalarExpression columnExpr = PivotVariable.GetVariableProperty(projectProperty).ToScalarExpression();
                    selectScalarExpr = SqlUtil.GetSelectScalarExpr(columnExpr, projectProperty);
                }
                else
                {
                    selectScalarExpr = SqlUtil.GetSelectScalarExpr(SqlUtil.GetValueExpr(null), projectProperty);
                }
                selectElements.Add(selectScalarExpr);
            }

            if (selectElements.Count == 0)
            {
                GremlinVariableProperty defaultProjection = PivotVariable.GetDefaultProjection();
                selectElements.Add(SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression(), GremlinKeyword.TableDefaultColumnName));
            }

            return(selectElements);
        }
示例#4
0
        public override WTableReference ToTableReference()
        {
            List <WScalarExpression> PropertyKeys = new List <WScalarExpression>();

            if (SourceVertexVariableProperty != null)
            {
                PropertyKeys.Add(SourceVertexVariableProperty.ToScalarExpression());
            }
            if (AdjEdgeVariableProperty != null)
            {
                PropertyKeys.Add(AdjEdgeVariableProperty.ToScalarExpression());
            }
            if (RevAdjEdgeVariableProperty != null)
            {
                PropertyKeys.Add(RevAdjEdgeVariableProperty.ToScalarExpression());
            }
            if (LabelVariableProperty != null)
            {
                PropertyKeys.Add(LabelVariableProperty.ToScalarExpression());
            }

            foreach (var property in ProjectedProperties)
            {
                PropertyKeys.Add(SqlUtil.GetValueExpr(property));
            }

            WTableReference secondTableRef = null;

            switch (EdgeType)
            {
            case WEdgeType.BothEdge:
                secondTableRef = SqlUtil.GetFunctionTableReference(GremlinKeyword.func.BothE, PropertyKeys, this, GetVariableName());
                break;

            case WEdgeType.InEdge:
                secondTableRef = SqlUtil.GetFunctionTableReference(GremlinKeyword.func.InE, PropertyKeys, this, GetVariableName());
                break;

            case WEdgeType.OutEdge:
                secondTableRef = SqlUtil.GetFunctionTableReference(GremlinKeyword.func.OutE, PropertyKeys, this, GetVariableName());
                break;
            }

            return(SqlUtil.GetCrossApplyTableReference(null, secondTableRef));
        }
示例#5
0
        internal List <WSelectElement> GetSelectElement(bool isToCompose1)
        {
            var selectElements = new List <WSelectElement>();

            if (this.PivotVariable.GetVariableType() == GremlinVariableType.NULL)
            {
                selectElements.Add(
                    SqlUtil.GetSelectScalarExpr(SqlUtil.GetValueExpr(null),
                                                GremlinKeyword.TableDefaultColumnName));
                return(selectElements);
            }

            if (isToCompose1)
            {
                selectElements.Add(
                    SqlUtil.GetSelectScalarExpr(this.PivotVariable.ToCompose1(), GremlinKeyword.TableDefaultColumnName));
                return(selectElements);
            }

            GremlinVariableProperty defaultProjection = this.PivotVariable.DefaultProjection();

            selectElements.Add(
                SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression(), this.PivotVariable.DefaultProperty()));

            foreach (var property in this.ProjectedProperties)
            {
                WScalarExpression selectScalarExpr;
                if (property == GremlinKeyword.Path)
                {
                    selectScalarExpr = ContextLocalPath.DefaultProjection().ToScalarExpression();
                }
                else
                {
                    selectScalarExpr = this.PivotVariable.ProjectedProperties.Contains(property)
                        ? this.PivotVariable.GetVariableProperty(property).ToScalarExpression()
                        : SqlUtil.GetValueExpr(null);
                }
                selectElements.Add(SqlUtil.GetSelectScalarExpr(selectScalarExpr, property));
            }

            return(selectElements);
        }
示例#6
0
        internal List <WSelectElement> GetSelectElement(List <string> ProjectedProperties)
        {
            var selectElements = new List <WSelectElement>();

            if ((PivotVariable is GremlinUnionVariable && HomeVariable is GremlinSideEffectVariable) ||
                PivotVariable.GetVariableType() == GremlinVariableType.NULL)
            {
                selectElements.Add(SqlUtil.GetSelectScalarExpr(SqlUtil.GetStarColumnReferenceExpr()));
                return(selectElements);
            }
            if (ProjectedProperties != null && ProjectedProperties.Count != 0)
            {
                foreach (var projectProperty in ProjectedProperties)
                {
                    WSelectScalarExpression selectScalarExpr;
                    if (projectProperty == GremlinKeyword.TableDefaultColumnName)
                    {
                        GremlinVariableProperty defaultProjection = PivotVariable.DefaultProjection();
                        selectScalarExpr = SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression(), GremlinKeyword.TableDefaultColumnName);
                        selectElements.Add(selectScalarExpr);
                    }
                    else
                    if (ProjectVariablePropertiesList.All(p => p.Item2 != projectProperty))
                    {
                        if (PivotVariable.ProjectedProperties.Contains(projectProperty))
                        {
                            WScalarExpression columnExpr =
                                PivotVariable.GetVariableProperty(projectProperty).ToScalarExpression();
                            selectScalarExpr = SqlUtil.GetSelectScalarExpr(columnExpr, projectProperty);
                            selectElements.Add(selectScalarExpr);
                        }
                        else
                        {
                            selectScalarExpr = SqlUtil.GetSelectScalarExpr(SqlUtil.GetValueExpr(null), projectProperty);
                            selectElements.Add(selectScalarExpr);
                        }
                    }
                }
            }
            else
            {
                selectElements.Add(SqlUtil.GetSelectScalarExpr(PivotVariable.DefaultProjection().ToScalarExpression(), GremlinKeyword.TableDefaultColumnName));
            }

            if (IsPopulateGremlinPath)
            {
                selectElements.Add(SqlUtil.GetSelectScalarExpr(CurrentContextPath.DefaultProjection().ToScalarExpression(), GremlinKeyword.Path));
            }
            foreach (var item in ProjectVariablePropertiesList)
            {
                selectElements.Add(SqlUtil.GetSelectScalarExpr(item.Item1.ToScalarExpression(), item.Item2));
            }
            if (selectElements.Count == 0)
            {
                if (PivotVariable is GremlinTableVariable ||
                    (PivotVariable is GremlinUnionVariable && HomeVariable is GremlinSideEffectVariable))
                {
                    selectElements.Add(SqlUtil.GetSelectScalarExpr(SqlUtil.GetStarColumnReferenceExpr()));
                }
                else if (PivotVariable.GetVariableType() == GremlinVariableType.Table)
                {
                    throw new Exception("Can't process table type");
                }
                else
                {
                    GremlinVariableProperty defaultProjection = PivotVariable.DefaultProjection();
                    selectElements.Add(SqlUtil.GetSelectScalarExpr(defaultProjection.ToScalarExpression()));
                }
            }

            return(selectElements);
        }