Example #1
0
 /// <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));
 }
Example #2
0
        public SqlCompilationResult Compile(ISqlCompileUnit statement)
        {
            var options = new SqlCompilerConfiguration {
                DatabaseQualifiedObjects = configuration.IsMultidatabase
            };

            return(underlyingDriver.Compile(statement, options));
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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));
        }
Example #5
0
        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);
            }
        }