internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnDbType) { if (string.IsNullOrEmpty(sourceColumnName)) { throw new ArgumentNullException(nameof(sourceColumnName)); } if (resolved_table == null) { resolved_table = batchResolver.SchemaMetadata.TryGetColumnSourceMetadata(SchemaName, TableName); if (resolved_table == null) { // table not exists??? throw new NotImplementedException(Key + "." + sourceColumnName); } } ColumnTypeMetadata sourceColumnType = resolved_table.TryGetColumnTypeByName(sourceColumnName); if (sourceColumnType != null) { columnDbType = new SourceColumnType(this, sourceColumnName, sourceColumnType.ColumnDbType, sourceColumnType.AllowNull); return(true); } else { //throw new NotImplementedException(Key + "." + sourceColumnName + " Table: [" + SchemaName + "].[" + TableName + "]"); columnDbType = null;// DbType.Object; // column 'personid' without alias => source traversion return(false); } }
public SelectElementVisitor(bool resolveColumnType, BatchOutputColumnTypeResolver columnTypeResolver, StatementWithCtesAndXmlNamespaces statement) : base(false) { this.resolveColumnType = resolveColumnType; this.columnTypeResolver = new StatementOutputColumnTypeResolverV2(columnTypeResolver, statement); this.outputSet = new ProcedureOutputSet(statement); this.statement = statement; }
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()); }
protected override bool IQueryModel_TryGetQueryOutputColumnAt(BatchOutputColumnTypeResolver batchResolver, int outputColumnIndex, out QueryColumnBase outputColumn) { if (_queryOutputResolved) { string outputColumnName = resolved_OutputColumnIndexes[outputColumnIndex]; return(IQueryModel_TryGetQueryOutputColumnByName(batchResolver, outputColumnName, out outputColumn)); } throw new NotImplementedException("outputColumnIndex:" + outputColumnIndex); }
protected override bool IQueryModel_TryGetQueryOutputColumnByName(BatchOutputColumnTypeResolver batchResolver, string outputColumnName, out QueryColumnBase outputColumn) { if (_outputColumns.TryGetValue(outputColumnName, out outputColumn)) { return(true); } else { return(false); } }
internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { if (columns.TryGetValue(sourceColumnName, out ColumnTypeMetadata columnTypeX)) { columnType = new SourceColumnType(this, sourceColumnName, columnTypeX.ColumnDbType, columnTypeX.AllowNull); return(true); } else { columnType = null; return(false); } }
internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { for (int idx = 0; idx < _cteColumns.Count; idx++) { Identifier col = _cteColumns[idx]; if (string.Equals(sourceColumnName, col.Dequote(), StringComparison.OrdinalIgnoreCase)) { // get the query's output column on this index if (this.query.TryGetQueryOutputColumnAt(batchResolver, idx, out QueryColumnBase outputColumnX)) { if (outputColumnX.ColumnDbType.HasValue) { columnType = new SourceColumnType(this, sourceColumnName, outputColumnX.ColumnDbType.Value, outputColumnX.AllowNull.GetValueOrDefault(true)); return(true); } else { columnType = new SourceColumnType(this, sourceColumnName);// DbType.Object; return(true); } } else { columnType = null; return(false); } } } if (this.query.TryGetQueryOutputColumnByName(batchResolver, sourceColumnName, out QueryColumnBase outputColumn)) { if (outputColumn.ColumnDbType.HasValue) { columnType = new SourceColumnType(this, sourceColumnName, outputColumn.ColumnDbType.Value, outputColumn.AllowNull.GetValueOrDefault(true)); return(true); } else { columnType = new SourceColumnType(this, sourceColumnName);// DbType.Object; return(true); } } columnType = null;// DbType.Object; return(false); }
internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { if (this.query.TryGetQueryOutputColumnByName(batchResolver, sourceColumnName, out QueryColumnBase outputColumn)) { if (outputColumn.ColumnDbType.HasValue) { columnType = new SourceColumnType(this, sourceColumnName, outputColumn.ColumnDbType.Value, outputColumn.AllowNull.GetValueOrDefault(true)); return(true); } else { columnType = new SourceColumnType(this, sourceColumnName);// DbType.Object; return(true); } } columnType = null;// DbType.Object; return(false); }
protected override bool IQueryModel_TryGetQueryOutputColumnByName(BatchOutputColumnTypeResolver batchResolver, string outputColumnName, out QueryColumnBase outputColumn) { foreach (var sub_mqe in union_queries) { if (sub_mqe.IsOutputColumnResolved(outputColumnName, out outputColumn)) { //AddOutputColumn(outputColumn); return(true); } if (_isRecirsive) { break; } } throw new NotImplementedException(Key + "." + outputColumnName); // source not found?!?! }
internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { // KEY: int // RANK: int if (string.Equals("KEY", sourceColumnName, StringComparison.OrdinalIgnoreCase)) { columnType = new SourceColumnType(this, sourceColumnName, DbType.Int32, true); return(true); } if (string.Equals("RANK", sourceColumnName, StringComparison.OrdinalIgnoreCase)) { columnType = new SourceColumnType(this, sourceColumnName, DbType.Int32, true); return(true); } columnType = null; return(false); }
//private QueryColumnBase override_TryResolveSelectedColumn(BatchOutputColumnTypeResolver batchResolver, string outputColumnName, string sourceColumnName) //{ // if (resolved_source_metadata == null) // { // resolved_source_metadata = batchResolver.TryGetTableVariable(VarTableRef.Variable.Name); // if (resolved_source_metadata == null) // { // throw new NotImplementedException(VarTableRef.WhatIsThis()); // } // } // return base.AddResolveOutputdColumn(new QueryColumnE(this, outputColumnName, sourceColumnName, columnDbType.Value)); //} internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { if (resolved_source_metadata == null) { resolved_source_metadata = batchResolver.TryGetTableVariable(VarTableRef.Variable.Name); if (resolved_source_metadata == null) { throw new NotImplementedException(VarTableRef.WhatIsThis()); } } ColumnTypeMetadata columnDbType = resolved_source_metadata.TryGetColumnTypeByName(sourceColumnName); if (columnDbType != null) { columnType = new SourceColumnType(this, sourceColumnName, columnDbType.ColumnDbType, columnDbType.AllowNull); return(true); } columnType = null;// DbType.Object; return(false); }
//internal QueryColumnBase override_TryResolveSelectedColumn(BatchOutputColumnTypeResolver batchResolver, string outputColumnName, string sourceColumnName) //{ // if (resolved_source_metadata == null) // { // resolved_source_metadata = batchResolver.SchemaMetadata.TryGetFunctionTableMetadata(SchemaName, FunctionName); // if (resolved_source_metadata == null) // { // throw new NotImplementedException(SchemaName + "." + FunctionName + " => " + outputColumnName); // } // } // DbType? columnDbType = resolved_source_metadata.TryGetColumnTypeByName(sourceColumnName); // if (columnDbType == null) // { // return null; // } // string outputColumnNameSafe = outputColumnName ?? sourceColumnName; // return base.AddResolveOutputdColumn(new QueryColumnE(this, outputColumnNameSafe, sourceColumnName, columnDbType.Value)); //} internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { if (resolved_source_metadata == null) { resolved_source_metadata = batchResolver.SchemaMetadata.TryGetFunctionTableMetadata(SchemaName, FunctionName); if (resolved_source_metadata == null) { throw new NotImplementedException(SchemaName + "." + FunctionName + " : " + sourceColumnName); } } ColumnTypeMetadata columnDbType = resolved_source_metadata.TryGetColumnTypeByName(sourceColumnName); if (columnDbType != null) { columnType = new SourceColumnType(this, sourceColumnName, columnDbType.ColumnDbType, columnDbType.AllowNull); return(true); } columnType = null; // DbType.Object; return(false); }
bool IQueryModel.TryGetQueryOutputColumnByName(BatchOutputColumnTypeResolver batchResolver, string outputColumnName, out QueryColumnBase outputColumn) { return(IQueryModel_TryGetQueryOutputColumnByName(batchResolver, outputColumnName, out outputColumn)); }
internal StatementVisitor(bool resolveColumnType, BatchOutputColumnTypeResolver columnTypeResolver, TSqlFragment toAnalyze) : base(false) { this.resolveColumnType = resolveColumnType; this.columnTypeResolver = columnTypeResolver; _toAnalyze = toAnalyze; }
bool IQueryModel.TryGetQuerySingleOutputColumn(BatchOutputColumnTypeResolver batchResolver, out QueryColumnBase outputColumn) { return(IQueryModel_TryGetQuerySingleOutputColumn(batchResolver, out outputColumn)); }
protected abstract bool IQueryModel_TryGetQueryOutputColumnByName(BatchOutputColumnTypeResolver batchResolver, string outputColumnName, out QueryColumnBase outputColumn);
protected override bool IQueryModel_TryGetQueryOutputColumnAt(BatchOutputColumnTypeResolver batchResolver, int outputColumnIndex, out QueryColumnBase outputColumn) { throw new NotImplementedException("outputColumnIndex:" + outputColumnIndex); }
bool IQueryModel.TryGetQueryOutputColumnAt(BatchOutputColumnTypeResolver batchResolver, int outputColumnIndex, out QueryColumnBase outputColumn) { return(IQueryModel_TryGetQueryOutputColumnAt(batchResolver, outputColumnIndex, out outputColumn)); }
internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { columnType = new SourceColumnType(this, sourceColumnName, constantType, allowNull); return(true); }
internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { columnType = null;// DbType.Object; return(false); }
protected override bool IQueryModel_TryGetQueryOutputColumnAt(BatchOutputColumnTypeResolver batchResolver, int outputColumnIndex, out QueryColumnBase outputColumn) { string outputColumnName = _outputColumnIndex[outputColumnIndex]; return(IQueryModel_TryGetQueryOutputColumnByName(batchResolver, outputColumnName, out outputColumn)); }
internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { columnType = new SourceColumnType(this, sourceColumnName, variableType, true); return(true); }
protected override bool IQueryModel_TryGetQuerySingleOutputColumn(BatchOutputColumnTypeResolver batchResolver, out QueryColumnBase outputColumn) { outputColumn = _outputColumns.Values.Single(); return(true); }
internal abstract bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType);
protected abstract bool IQueryModel_TryGetQueryOutputColumnAt(BatchOutputColumnTypeResolver batchResolver, int outputColumnIndex, out QueryColumnBase outputColumn);
internal override bool TryResolveSourceColumnType(BatchOutputColumnTypeResolver batchResolver, string sourceColumnName, out SourceColumnType columnType) { return(Cte.TryResolveSourceColumnType(batchResolver, sourceColumnName, out columnType)); }
protected abstract bool IQueryModel_TryGetQuerySingleOutputColumn(BatchOutputColumnTypeResolver batchResolver, out QueryColumnBase outputColumn);
public StatementOutputColumnTypeResolverV1(BatchOutputColumnTypeResolver batchResolver, StatementWithCtesAndXmlNamespaces statement) { SchemaMetadata = batchResolver.SchemaMetadata; this.batchResolver = batchResolver; this.statement = statement; }