//UPDATEやINSERTなどでSELECTを使用したときに発生するExplicitVisit
        public override void ExplicitVisit(QueryDerivedTable node)
        {
            TableNameIllegalCandidate candidate = CreateAndPushCandidate();

            base.ExplicitVisit(node);
            PopAndSetIllegalStatement(candidate);
        }
        private BooleanIsNullExpression GetIsNotNull()
        {
            var isNull = new BooleanIsNullExpression();
            isNull.IsNot = true;
            var query = (isNull.Expression = new ScalarSubquery()) as ScalarSubquery;
            var spec = (query.QueryExpression = new QuerySpecification()) as QuerySpecification;
            spec.SelectElements.Add(new SelectStarExpression());
            var fromTable = new QueryDerivedTable();
            spec.FromClause = new FromClause();
            spec.FromClause.TableReferences.Add(fromTable);
            var subQuerySpec = new QuerySpecification();
            var version = new GlobalVariableExpression();
            version.Name = "@@version";

            var columnName = new IdentifierOrValueExpression();
            //var v = (columnName.ValueExpression = new StringLiteral()) as StringLiteral;
            //v.Value = "v";
            columnName.Identifier = new Identifier();
            columnName.Identifier.Value = "v";

            subQuerySpec.SelectElements.Add(new SelectScalarExpression {Expression = version, ColumnName = columnName});
            fromTable.QueryExpression = subQuerySpec;
            fromTable.Alias = new Identifier {Value = "edition"};

            spec.WhereClause = new WhereClause();
            var likePredicate = (spec.WhereClause.SearchCondition = new LikePredicate()) as LikePredicate;
            var col = (likePredicate.FirstExpression = new ColumnReferenceExpression()) as ColumnReferenceExpression;
            col.ColumnType = ColumnType.Regular;
            col.MultiPartIdentifier = new MultiPartIdentifier();
            col.MultiPartIdentifier.Identifiers.Add(new Identifier {Value = "v"});
            var ver = (likePredicate.SecondExpression = new StringLiteral()) as StringLiteral;
            ver.Value = "%Enterprise%";

            return isNull;
        }
Exemple #3
0
        protected override object InternalVisit(QueryDerivedTable node)
        {
            var realTable = Visit <SQLExecutionResult>(node.QueryExpression).Values;

            if (node.Alias != null)
            {
                return(new RecordTable(node.Alias.Value, realTable.Columns, realTable.Records));
            }
            return(realTable);
        }
        private BooleanIsNullExpression GetIsNotNull()
        {
            var isNull = new BooleanIsNullExpression();

            isNull.IsNot = true;
            var query = (isNull.Expression = new ScalarSubquery()) as ScalarSubquery;
            var spec  = (query.QueryExpression = new QuerySpecification()) as QuerySpecification;

            spec.SelectElements.Add(new SelectStarExpression());
            var fromTable = new QueryDerivedTable();

            spec.FromClause = new FromClause();
            spec.FromClause.TableReferences.Add(fromTable);
            var subQuerySpec = new QuerySpecification();
            var version      = new GlobalVariableExpression();

            version.Name = "@@version";

            var columnName = new IdentifierOrValueExpression();

            //var v = (columnName.ValueExpression = new StringLiteral()) as StringLiteral;
            //v.Value = "v";
            columnName.Identifier       = new Identifier();
            columnName.Identifier.Value = "v";


            subQuerySpec.SelectElements.Add(new SelectScalarExpression {
                Expression = version, ColumnName = columnName
            });
            fromTable.QueryExpression = subQuerySpec;
            fromTable.Alias           = new Identifier {
                Value = "edition"
            };

            spec.WhereClause = new WhereClause();
            var likePredicate = (spec.WhereClause.SearchCondition = new LikePredicate()) as LikePredicate;
            var col           = (likePredicate.FirstExpression = new ColumnReferenceExpression()) as ColumnReferenceExpression;

            col.ColumnType          = ColumnType.Regular;
            col.MultiPartIdentifier = new MultiPartIdentifier();
            col.MultiPartIdentifier.Identifiers.Add(new Identifier {
                Value = "v"
            });
            var ver = (likePredicate.SecondExpression = new StringLiteral()) as StringLiteral;

            ver.Value = "%Enterprise%";

            return(isNull);
        }
Exemple #5
0
        private void ProcessTableReference(TableReference TableRef)
        {
            string Type = GetFragmentType(TableRef);

            switch (Type)
            {
            case "FullTextTableReference":
                break;

            case "NamedTableReference":
                var    NamedTableRef = (NamedTableReference)TableRef;
                var    Naming        = NamedTableRef.SchemaObject;
                string ObjectName    = (Naming.DatabaseIdentifier == null ? this.databaseName : Naming.DatabaseIdentifier.Value) + "." +
                                       (Naming.SchemaIdentifier == null ? this.schemaName : Naming.SchemaIdentifier.Value) + "." +
                                       (Naming.BaseIdentifier == null ? "" : Naming.BaseIdentifier.Value);
                addSourcetoCurrentObject(ObjectName);

                break;

            case "QueryDerivedTable":
                QueryDerivedTable qdt = (QueryDerivedTable)TableRef;
                ProcessQueryExpression(qdt.QueryExpression);
                break;

            case "QualifiedJoin":
                QualifiedJoin qj = (QualifiedJoin)TableRef;
                ProcessTableReference(qj.FirstTableReference);
                ProcessTableReference(qj.SecondTableReference);
                break;

            case "UnqualifiedJoin":
                UnqualifiedJoin uqj = (UnqualifiedJoin)TableRef;
                ProcessTableReference(uqj.FirstTableReference);
                ProcessTableReference(uqj.SecondTableReference);
                break;

            case "SchemaObjectFunctionTableReference":
                SchemaObjectFunctionTableReference ftr = (SchemaObjectFunctionTableReference)TableRef;
                break;

            case "PivotedTableReference":
                PivotedTableReference pvt = (PivotedTableReference)TableRef;
                ProcessTableReference(pvt.TableReference);
                break;

            default:
                break;
            }
        }
Exemple #6
0
        public QsiDerivedTableNode VisitQueryDerivedTable(QueryDerivedTable queryDerivedTable)
        {
            return(TreeHelper.Create <QsiDerivedTableNode>(n =>
            {
                if (queryDerivedTable.Alias != null)
                {
                    n.Alias.SetValue(CreateAliasNode(queryDerivedTable.Alias));
                }

                n.Columns.SetValue(TreeHelper.CreateAllColumnsDeclaration());
                n.Source.SetValue(VisitQueryExpression(queryDerivedTable.QueryExpression));

                SqlServerTree.PutFragmentSpan(n, queryDerivedTable);
            }));
        }
        internal gsFromTerm GetTable(QueryDerivedTable queryDerivedTable)
        {
            gsSubQueryFromTerm table = new gsSubQueryFromTerm();

            table.TableAlias = Convert.ToString(queryDerivedTable.Alias.Value);

            if (queryDerivedTable.QueryExpression is QuerySpecification)
            {
                gsSelectQuery      subQry  = new gsSelectQuery();
                QuerySpecification qrySpec = queryDerivedTable.QueryExpression as QuerySpecification;

                gsSelectQueryParser qryParser = new gsSelectQueryParser();
                qryParser.ProcessQuerySpecification(qrySpec, subQry);

                table.SubQuery = subQry;
            }
            else
            {
                throw new NotImplementedException($"QuerySpecification {queryDerivedTable.QueryExpression.GetType().Name} not supported");
            }

            return(table);
        }
Exemple #8
0
        private void recursifRecuperationProjection(QuerySpecification node)
        {
            bool starExpression = false;

            if (node.SelectElements != null)
            {
                foreach (TSqlFragment selectElement in node.SelectElements)
                {
                    if (selectElement is SelectStarExpression)
                    {
                        starExpression = true;
                        if (node.SelectElements.Count > 1)
                        {
                            //Lever une exception qui dit que c'est non géré*

                            break;
                        }
                        else
                        {
                            if (node.FromClause != null)
                            {
                                foreach (TSqlFragment fromElement in node.FromClause.TableReferences)
                                {
                                    if (fromElement is NamedTableReference)
                                    {
                                        String namedTableReferenceText = GetNodeTokenText(fromElement);
                                        projectionList.AddRange(GetProjectionsFromTablesReference(namedTableReferenceText));
                                    }
                                    if (fromElement is QualifiedJoin)
                                    {
                                        QualifiedJoin currQualifiedJoin = (QualifiedJoin)fromElement;
                                        if (currQualifiedJoin.FirstTableReference is NamedTableReference && currQualifiedJoin.SecondTableReference is NamedTableReference)
                                        {
                                            String namedTableReferenceText1 = GetNodeTokenText(currQualifiedJoin.FirstTableReference);
                                            projectionList.AddRange(GetProjectionsFromTablesReference(namedTableReferenceText1));

                                            String namedTableReferenceText2 = GetNodeTokenText(currQualifiedJoin.SecondTableReference);
                                            projectionList.AddRange(GetProjectionsFromTablesReference(namedTableReferenceText2));
                                        }
                                    }
                                    if (fromElement is PivotedTableReference)
                                    {
                                        PivotedTableReference currPivotedTable = (PivotedTableReference)fromElement;
                                        if (currPivotedTable.TableReference is NamedTableReference)
                                        {
                                            String namedTableReferenceText = GetNodeTokenText(currPivotedTable.TableReference);
                                            projectionList.AddRange(GetProjectionsFromTablesReference(namedTableReferenceText));
                                        }
                                    }
                                    if (fromElement is QueryDerivedTable)
                                    {
                                        QueryDerivedTable currQueryDerivedTable = (QueryDerivedTable)fromElement;
                                        if (currQueryDerivedTable.QueryExpression is QuerySpecification)
                                        {
                                            QuerySpecification currQuerySpecification = (QuerySpecification)currQueryDerivedTable.QueryExpression;
                                            recursifRecuperationProjection(currQuerySpecification);
                                        }
                                        if (currQueryDerivedTable.QueryExpression is BinaryQueryExpression)
                                        {
                                            //BinaryQueryExpression représente un union entre deux requête donc si on veut les projections dans le cas ou
                                            //Il y à un * il faut prendre les projections de la première requête d'union ou intersection
                                            BinaryQueryExpression currBinaryQueryExpression = (BinaryQueryExpression)currQueryDerivedTable.QueryExpression;


                                            while (currBinaryQueryExpression.FirstQueryExpression is BinaryQueryExpression)
                                            {
                                                currBinaryQueryExpression = (BinaryQueryExpression)currBinaryQueryExpression.FirstQueryExpression;
                                            }
                                            if (currBinaryQueryExpression.FirstQueryExpression is QuerySpecification)
                                            {
                                                QuerySpecification currQuerySpecification = (QuerySpecification)currBinaryQueryExpression.FirstQueryExpression;
                                                recursifRecuperationProjection(currQuerySpecification);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (starExpression == false)
                {
                    foreach (SelectElement selectElement in node.SelectElements)
                    {
                        projectionList.Add(GetNodeTokenText(selectElement));
                    }
                }
            }
        }
 public override void Visit(QueryDerivedTable node) { this.action(node); }
 public override void ExplicitVisit(QueryDerivedTable fragment)
 {
     _fragments.Add(fragment);
 }