public static void LoadViewOutputColumns(ISchemaMetadataProvider schemaMetadata, string ddl, Action <OutputColumnDescriptor> collector) { TSqlFragment sqlF = ScriptDomFacade.Parse(ddl); //CreateViewStatement stmt_CreateView = (CreateViewStatement)((TSqlScript)sqlF).Batches[0].Statements[0]; SelectStatement stmt_sel = (SelectStatement)((TSqlScript)sqlF).Batches[0].Statements[0]; BatchOutputColumnTypeResolver batchResolver = new BatchOutputColumnTypeResolver(schemaMetadata, stmt_sel, new BatchWithoutParameters()); StatementOutputColumnTypeResolverV2 resolver = new StatementOutputColumnTypeResolverV2(batchResolver, stmt_sel); QuerySpecification first = TopQuerySpecification(stmt_sel.QueryExpression); foreach (SelectElement se in first.SelectElements) { if (se is SelectScalarExpression scalarExpr) { OutputColumnDescriptor col = resolver.ResolveSelectScalarExpression(scalarExpr); collector(col); } else { throw new NotImplementedException(se.WhatIsThis()); } } }
public static void LoadFunctionOutputColumns(ISchemaMetadataProvider schemaMetadata, IBatchParameterMetadata parameterMetadata, string functionBodyScript, Action <OutputColumnDescriptor> collector) { functionBodyScript = RemoveTrailingBlockComment(functionBodyScript); if (functionBodyScript.Trim()[0] == '(') { int idx = functionBodyScript.IndexOf('('); int lastix = functionBodyScript.LastIndexOf(')'); functionBodyScript = functionBodyScript.Substring(idx + 1, lastix - idx - 2); functionBodyScript = functionBodyScript.Trim(); } TSqlFragment sqlF = ScriptDomFacade.Parse(functionBodyScript); SelectStatement stmt_sel = (SelectStatement)((TSqlScript)sqlF).Batches[0].Statements[0]; BatchOutputColumnTypeResolver batchResolver = new BatchOutputColumnTypeResolver(schemaMetadata, sqlF, parameterMetadata); StatementOutputColumnTypeResolverV2 resolver = new StatementOutputColumnTypeResolverV2(batchResolver, stmt_sel); QuerySpecification first = TopQuerySpecification(stmt_sel.QueryExpression); foreach (SelectElement se in first.SelectElements) { if (se is SelectScalarExpression scalarExpr) { OutputColumnDescriptor col = resolver.ResolveSelectScalarExpression(scalarExpr); collector(col); } else { throw new NotImplementedException(se.WhatIsThis()); } } }
public static ProcedureOutputSet[] IsQueryProcedure(bool resolveColumnType, ISchemaMetadataProvider schemaMetadata, ProcedureMetadata procedure_metadata) { BatchOutputColumnTypeResolver columnTypeResolver = new BatchOutputColumnTypeResolver(schemaMetadata, procedure_metadata.BodyFragment, procedure_metadata); StatementVisitor vstor = new StatementVisitor(resolveColumnType, columnTypeResolver, procedure_metadata.BodyFragment); procedure_metadata.BodyFragment.Accept(vstor); return(vstor.resultHasOutputResultSet.ToArray()); }
public BatchOutputColumnTypeResolver(ISchemaMetadataProvider schemaMetadata, TSqlFragment bodyFragment, IBatchParameterMetadata parametersMetadata) { SchemaMetadata = schemaMetadata; BodyFragment = bodyFragment; parameters = parametersMetadata; }
public StatementOutputColumnTypeResolverV1(BatchOutputColumnTypeResolver batchResolver, StatementWithCtesAndXmlNamespaces statement) { SchemaMetadata = batchResolver.SchemaMetadata; this.batchResolver = batchResolver; this.statement = statement; }