/// <summary> /// Compiles the specified statement into SQL command representation. /// </summary> /// <param name="statement">The Sql.Dom statement.</param> /// <param name="configuration">The options of compilation.</param> /// <returns>Result of compilation.</returns> public SqlCompilationResult Compile(ISqlCompileUnit statement, SqlCompilerConfiguration configuration) { ArgumentValidator.EnsureArgumentNotNull(statement, nameof(statement)); ArgumentValidator.EnsureArgumentNotNull(configuration, nameof(configuration)); ValidateCompilerConfiguration(configuration); return(CreateCompiler().Compile(statement, configuration)); }
public SqlCompilationResult Compile(ISqlCompileUnit statement) { var options = new SqlCompilerConfiguration { DatabaseQualifiedObjects = configuration.IsMultidatabase }; return(underlyingDriver.Compile(statement, options)); }
private void ValidateCompilerConfiguration(SqlCompilerConfiguration configuration) { var supported = ServerInfo.Query.Features.Supports(QueryFeatures.MultidatabaseQueries); var requested = configuration.DatabaseQualifiedObjects; if (requested && !supported) { throw SqlHelper.NotSupported(QueryFeatures.MultidatabaseQueries); } }
public SqlCompilationResult Compile(ISqlCompileUnit statement, NodeConfiguration nodeConfiguration) { SqlCompilerConfiguration options; if (configuration.ShareStorageSchemaOverNodes) { options = new SqlCompilerConfiguration(nodeConfiguration.GetDatabaseMapping(), nodeConfiguration.GetSchemaMapping()); } else { options = new SqlCompilerConfiguration(); } options.DatabaseQualifiedObjects = configuration.IsMultidatabase; return(underlyingDriver.Compile(statement, options)); }
private void TestQueryNamesUnreadable(ISqlCompileUnit query, Schema defaultSchema) { string queryText = string.Empty; if (MultidatabaseSupported()) { Assert.Throws <ArgumentNullException>(() => queryText = Driver.Compile(query).GetCommandText()); var compilerConfiguration = new SqlCompilerConfiguration(new Dictionary <string, string>(), new Dictionary <string, string>()) { DatabaseQualifiedObjects = true }; Assert.DoesNotThrow(() => queryText = Driver.Compile(query, compilerConfiguration).GetCommandText()); Assert.That(queryText.Contains(defaultSchema.GetDbNameInternal()), Is.True); Assert.That(queryText.Contains(defaultSchema.Catalog.GetDbNameInternal()), Is.True); var schemaMap = new Dictionary <string, string> { { defaultSchema.GetDbNameInternal(), DummySchemaName } }; var databaseMap = new Dictionary <string, string> { { defaultSchema.Catalog.GetDbNameInternal(), DummyDatabaseName } }; compilerConfiguration = new SqlCompilerConfiguration(databaseMap, schemaMap) { DatabaseQualifiedObjects = true }; Assert.DoesNotThrow(() => queryText = Driver.Compile(query, compilerConfiguration).GetCommandText()); Assert.That(queryText.Contains(defaultSchema.GetDbNameInternal()), Is.False); Assert.That(queryText.Contains(defaultSchema.Catalog.GetDbNameInternal()), Is.False); Assert.That(queryText.Contains(DummyDatabaseName), Is.True); Assert.That(queryText.Contains(DummySchemaName), Is.True); } if (MultischemaSupported()) { Assert.Throws <ArgumentNullException>(() => queryText = Driver.Compile(query).GetCommandText()); var compilerConfiguration = new SqlCompilerConfiguration(new Dictionary <string, string>(), new Dictionary <string, string>()) { DatabaseQualifiedObjects = false }; Assert.DoesNotThrow(() => queryText = Driver.Compile(query, compilerConfiguration).GetCommandText()); Assert.That(queryText.Contains(defaultSchema.GetDbNameInternal()), Is.True); Assert.That(queryText.Contains(defaultSchema.Catalog.GetDbNameInternal()), Is.False); var schemaMap = new Dictionary <string, string> { { defaultSchema.GetDbNameInternal(), DummySchemaName } }; var databaseMap = new Dictionary <string, string> { { defaultSchema.Catalog.GetDbNameInternal(), DummyDatabaseName } }; compilerConfiguration = new SqlCompilerConfiguration(databaseMap, schemaMap) { DatabaseQualifiedObjects = false }; Assert.DoesNotThrow(() => queryText = Driver.Compile(query, compilerConfiguration).GetCommandText()); Assert.That(queryText.Contains(defaultSchema.GetDbNameInternal()), Is.False); Assert.That(queryText.Contains(defaultSchema.Catalog.GetDbNameInternal()), Is.False); Assert.That(queryText.Contains(DummyDatabaseName), Is.False); Assert.That(queryText.Contains(DummySchemaName), Is.True); } else { Assert.DoesNotThrow(() => queryText = Driver.Compile(query).GetCommandText()); var compilerConfiguration = new SqlCompilerConfiguration(new Dictionary <string, string>(), new Dictionary <string, string>()) { DatabaseQualifiedObjects = false }; Assert.DoesNotThrow(() => queryText = Driver.Compile(query, compilerConfiguration).GetCommandText()); Assert.That(queryText.Contains(defaultSchema.GetDbNameInternal()), Is.False); Assert.That(queryText.Contains(defaultSchema.Catalog.GetDbNameInternal()), Is.False); var schemaMap = new Dictionary <string, string> { { defaultSchema.GetDbNameInternal(), DummySchemaName } }; var databaseMap = new Dictionary <string, string> { { defaultSchema.Catalog.GetDbNameInternal(), DummyDatabaseName } }; compilerConfiguration = new SqlCompilerConfiguration(databaseMap, schemaMap) { DatabaseQualifiedObjects = false }; Assert.DoesNotThrow(() => queryText = Driver.Compile(query, compilerConfiguration).GetCommandText()); Assert.That(queryText.Contains(defaultSchema.GetDbNameInternal()), Is.False); Assert.That(queryText.Contains(defaultSchema.Catalog.GetDbNameInternal()), Is.False); Assert.That(queryText.Contains(DummyDatabaseName), Is.False); Assert.That(queryText.Contains(DummySchemaName), Is.False); } }