public ImmutableDataInsertActionNode(
     IQsiTreeNode parent,
     IQsiTableDirectivesNode directives,
     IQsiTableAccessNode target,
     QsiQualifiedIdentifier[] partitions,
     QsiQualifiedIdentifier[] columns,
     IQsiRowValueExpressionNode[] values,
     IQsiSetColumnExpressionNode[] setValues,
     IQsiTableNode valueTable,
     QsiDataConflictBehavior conflictBehavior,
     IQsiDataConflictActionNode conflictAction,
     IUserDataHolder userData)
 {
     Parent           = parent;
     Directives       = directives;
     Target           = target;
     Partitions       = partitions;
     Columns          = columns;
     Values           = values;
     SetValues        = setValues;
     ValueTable       = valueTable;
     ConflictBehavior = conflictBehavior;
     ConflictAction   = conflictAction;
     UserData         = userData;
 }
Ejemplo n.º 2
0
        protected virtual async ValueTask <QsiTableStructure> BuildTableAccessStructure(TableCompileContext context, IQsiTableAccessNode table)
        {
            context.ThrowIfCancellationRequested();

            var lookup = ResolveTableStructure(context, table.Identifier);

            // view
            if (context.Options.UseViewTracing &&
                !lookup.IsSystem &&
                (lookup.Type == QsiTableType.View || lookup.Type == QsiTableType.MaterializedView))
            {
                var script = context.Engine.RepositoryProvider.LookupDefinition(lookup.Identifier, lookup.Type) ??
                             throw new QsiException(QsiError.UnableResolveDefinition, lookup.Identifier);

                var viewTable = (IQsiTableNode)context.Engine.TreeParser.Parse(script) ??
                                throw new QsiException(QsiError.Internal, "Invalid view node");

                var typeBackup = lookup.Type;

                using var viewCompileContext = new TableCompileContext(context);

                if (lookup.Identifier.Level > 1)
                {
                    viewCompileContext.PushIdentifierScope(lookup.Identifier.SubIdentifier(..^ 1));
                }

                var viewTableStructure = await BuildTableStructure(viewCompileContext, viewTable);

                viewTableStructure.Identifier = ResolveQualifiedIdentifier(context, viewTableStructure.Identifier);
                lookup      = viewTableStructure;
                lookup.Type = typeBackup;
            }

            return(lookup);
        }
        protected override async ValueTask <QsiTableStructure> BuildTableAccessStructure(TableCompileContext context, IQsiTableAccessNode table)
        {
            var structure = await base.BuildTableAccessStructure(context, table);

            if (table is IDynamicTableNode dynamicTableNode)
            {
                structure = structure.Clone();
                PatchDynamicTable(structure, dynamicTableNode);
            }

            return(structure);
        }