void Sooda.QL.ISoqlVisitor.Visit(SoqlContainsExpression v)
 {
     if (v.Path != null)
     {
         v.Path.Accept(this);
     }
     else
     {
         if (!_result.Contains(_rootClass))
         {
             _result.Add(_rootClass);
         }
     }
     v.Expr.Accept(this);
 }
Ejemplo n.º 2
0
        public virtual void Visit(SoqlContainsExpression v)
        {
            if (v.Path != null)
            {
                v.Path.Accept(this);
                Output.Write('.');
            }

            Output.Write(v.CollectionName);
            Output.Write('.');
            Output.Write("Contains(");
            if (v.Expr is SoqlQueryExpression && IndentOutput)
            {
                Output.WriteLine();
            }
            v.Expr.Accept(this);
            if (v.Expr is SoqlQueryExpression && IndentOutput)
            {
                Output.WriteLine();
            }
            Output.Write(')');
        }
Ejemplo n.º 3
0
        public virtual void Visit(SoqlContainsExpression v)
        {
            if (v.Path != null)
            {
                v.Path.Accept(this);
                Output.Write('.');
            }

            Output.Write(v.CollectionName);
            Output.Write('.');
            Output.Write("Contains(");
            if (v.Expr is SoqlQueryExpression && IndentOutput)
                Output.WriteLine();
            v.Expr.Accept(this);
            if (v.Expr is SoqlQueryExpression && IndentOutput)
                Output.WriteLine();
            Output.Write(')');
        }
 void Sooda.QL.ISoqlVisitor.Visit(SoqlContainsExpression v)
 {
     if (v.Path != null)
     {
         v.Path.Accept(this);
     }
     else
     {
         if (!_result.Contains(_rootClass))
             _result.Add(_rootClass);
     }
     v.Expr.Accept(this);
 }
Ejemplo n.º 5
0
        public override void Visit(SoqlContainsExpression v)
        {
            ClassInfo currentClass;
            string p;
            string firstTableAlias = null;

            if (v.Path != null)
            {
                IFieldContainer container = GenerateTableJoins(v.Path, out p, out firstTableAlias);
                currentClass = container as ClassInfo;
            }
            else
            {
                currentClass = FindClassByCollectionName(v.CollectionName, out p);
            }

            CollectionOnetoManyInfo col1n = currentClass.FindCollectionOneToMany(v.CollectionName);
            if (col1n != null)
            {
                SoqlQueryExpression query = CreateCollectionQuery(currentClass, p, col1n, new SoqlAsteriskExpression(), v.Expr);
                SoqlExistsExpression subExists = new SoqlExistsExpression(query);
                subExists.Accept(this);
                return;
            }

            CollectionManyToManyInfo colnn = currentClass.FindCollectionManyToMany(v.CollectionName);
            if (colnn != null)
            {
                RelationInfo ri = colnn.GetRelationInfo();

                Output.Write("exists (select * from ");
                OutputTableFrom(ri.Table, "");
                Output.Write(" where ");
                Output.Write(ri.Table.Fields[1 - colnn.MasterField].DBColumnName);
                Output.Write('=');
                OutputColumn(GetTableAliasForExpressionPrefix(p), currentClass.GetFirstPrimaryKeyField());
                Output.Write(" and ");
                Output.Write(ri.Table.Fields[colnn.MasterField].DBColumnName);
                Output.Write(" in ");

                if (!(v.Expr is SoqlQueryExpression))
                    Output.Write('(');
                v.Expr.Accept(this);
                if (!(v.Expr is SoqlQueryExpression))
                    Output.Write(')');

                Output.Write(')');
                return;
            }

            throw new Exception("Unknown collection " + v.CollectionName + " in " + currentClass.Name);
        }