private string GetSqlText_Table( string tableDataModule, string tableSchema, string tableName, string tableAlias, DbQueryTableMode mode = DbQueryTableMode.CompleteName, string defaultDataModule = null, string defaultSchema = null, IScriptVariableSet scriptVariableSet = null, IBdoLog log = null) { return(GetSqlText_Table( DbFluent.Table(tableName, tableSchema, tableDataModule).WithAlias(tableAlias), null, null, mode, defaultDataModule, defaultSchema, scriptVariableSet, log)); }
// ------------------------------------------ // TABLES // ------------------------------------------ #region Tables private string GetSqlText_Table( DbTable table, IDbQuery query = null, IDataElementSet parameterSet = null, DbQueryTableMode mode = DbQueryTableMode.CompleteName, string defaultDataModule = null, string defaultSchema = null, IScriptVariableSet scriptVariableSet = null, IBdoLog log = null) { var queryString = ""; if (table?.Expression != null) { string expression = Scope?.Interpreter.Evaluate(table.Expression, scriptVariableSet, log)?.ToString() ?? ""; queryString += expression; } else if (mode == DbQueryTableMode.CompleteName && !string.IsNullOrEmpty(table?.Alias)) { queryString += GetSqlText_Table(table.Alias); } else if (table is DbJoinedTable joinedTable) { switch (joinedTable.Kind) { case DbQueryJoinKind.Inner: { queryString += " inner join "; break; } case DbQueryJoinKind.Left: { queryString += " left join "; break; } case DbQueryJoinKind.Right: { queryString += " right join "; break; } } queryString += GetSqlText_Table( joinedTable.Table, query, parameterSet, DbQueryTableMode.CompleteNameAsAlias, query.DataModule, query.Schema, scriptVariableSet: scriptVariableSet, log: log); if (joinedTable.Kind != DbQueryJoinKind.None) { queryString += " on "; string expression = Scope?.Interpreter.Evaluate(joinedTable.Condition, scriptVariableSet, log)?.ToString() ?? string.Empty; queryString += expression; } } else { if (table is DbDerivedTable derivedTable) { string subQuery = BuildQuery(derivedTable.Query, DbQueryParameterMode.Scripted, parameterSet, scriptVariableSet, log); UpdateParameterSet(query.ParameterSet, derivedTable.Query); queryString = "(" + subQuery + ")"; } else if (table is DbTupledTable tupledTable) { if (tupledTable?.Tuples?.Count > 0) { if (!string.IsNullOrEmpty(queryString)) { queryString += ", "; } foreach (var tuple in tupledTable.Tuples) { var tupleString = string.Join(", ", tuple.Fields.Select(field => GetSqlText_Field( field, query, parameterSet, DbQueryFieldMode.OnlyValue, query.DataModule, query.Schema, scriptVariableSet: scriptVariableSet, log: log))); queryString += "(" + tupleString + ")"; } } queryString = queryString.If(!string.IsNullOrEmpty(queryString), "(values " + queryString + ")"); } else if (!string.IsNullOrEmpty(table?.Name)) { var tableName = table.Name; var tableSchema = table.Schema; var tableDataModule = table.DataModule; if (string.IsNullOrEmpty(tableDataModule)) { tableDataModule = defaultDataModule; } if (string.IsNullOrEmpty(tableSchema)) { tableSchema = defaultSchema; } if (!string.IsNullOrEmpty(tableDataModule)) { tableDataModule = GetDatabaseName(tableDataModule); } string script = DbFluent.Table(tableName, tableSchema, tableDataModule); queryString = Scope?.Interpreter.Evaluate(script, DataExpressionKind.Script, scriptVariableSet, log)?.ToString() ?? String.Empty; } if (!string.IsNullOrEmpty(table.Alias)) { switch (mode) { case DbQueryTableMode.AliasAsCompleteName: { queryString = GetSqlText_Table(table.Alias) + " as " + queryString; break; } case DbQueryTableMode.CompleteNameAsAlias: { queryString = queryString + " as " + GetSqlText_Table(table.Alias); break; } default: break; } } } return(queryString); }