Пример #1
0
        internal static string DropDatabaseScript(string databaseName)
        {
            var builder = new SqlDdlBuilder();

            builder.AppendSql("drop database ");
            builder.AppendIdentifier(databaseName);

            return(builder.unencodedStringBuilder.ToString());
        }
Пример #2
0
        private static string SetReadCommittedSnapshotScript(string databaseName)
        {
            var builder = new SqlDdlBuilder();

            builder.AppendSql("alter database ");
            builder.AppendIdentifier(databaseName);
            builder.AppendSql(" set read_committed_snapshot on");

            return(builder.unencodedStringBuilder.ToString());
        }
Пример #3
0
        internal static string CreateDatabaseExistsScript(string databaseName, bool useDeprecatedSystemTable)
        {
            var builder = new SqlDdlBuilder();

            builder.AppendSql("SELECT Count(*) FROM ");
            AppendSysDatabases(builder, useDeprecatedSystemTable);
            builder.AppendSql(" WHERE [name]=");
            builder.AppendStringLiteral(databaseName);
            return(builder.unencodedStringBuilder.ToString());
        }
Пример #4
0
        internal static string CreateDatabaseExistsScript(string databaseName)
        {
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("IF db_id(");
            sqlDdlBuilder.AppendStringLiteral(databaseName);
            sqlDdlBuilder.AppendSql(") IS NOT NULL SELECT 1 ELSE SELECT Count(*) FROM sys.databases WHERE [name]=");
            sqlDdlBuilder.AppendStringLiteral(databaseName);
            return(sqlDdlBuilder.unencodedStringBuilder.ToString());
        }
Пример #5
0
 private static void AppendSysDatabases(SqlDdlBuilder builder, bool useDeprecatedSystemTable)
 {
     if (useDeprecatedSystemTable)
     {
         builder.AppendSql("sysdatabases");
     }
     else
     {
         builder.AppendSql("sys.databases");
     }
 }
Пример #6
0
        internal static string SetDatabaseOptionsScript(SqlVersion sqlVersion, string databaseName)
        {
            if (sqlVersion < SqlVersion.Sql9)
            {
                return(string.Empty);
            }
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("if serverproperty('EngineEdition') <> 5 execute sp_executesql ");
            sqlDdlBuilder.AppendStringLiteral(SqlDdlBuilder.SetReadCommittedSnapshotScript(databaseName));
            return(sqlDdlBuilder.unencodedStringBuilder.ToString());
        }
Пример #7
0
        private void AppendIdentifier(EntitySet table, Action <string> AppendIdentifierEscape)
        {
            string schemaName = SqlDdlBuilder.GetSchemaName(table);
            string tableName  = SqlDdlBuilder.GetTableName(table);

            if (schemaName != null)
            {
                AppendIdentifierEscape(schemaName);
                this.AppendSql(".");
            }
            AppendIdentifierEscape(tableName);
        }
Пример #8
0
        private void AppendCreateSchema(string schema)
        {
            this.AppendSql("if (schema_id(");
            this.AppendStringLiteral(schema);
            this.AppendSql(") is null) exec(");
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("create schema ");
            sqlDdlBuilder.AppendIdentifier(schema);
            this.AppendStringLiteral(sqlDdlBuilder.unencodedStringBuilder.ToString());
            this.AppendSql(");");
            this.AppendNewLine();
        }
Пример #9
0
        internal static string SetDatabaseOptionsScript(SqlVersion sqlVersion, string databaseName)
        {
            if (sqlVersion < SqlVersion.Sql9)
            {
                return(String.Empty);
            }

            var builder = new SqlDdlBuilder();

            // Set READ_COMMITTED_SNAPSHOT ON, if SQL Server 2005 and up, and not SQLAzure.
            builder.AppendSql("if serverproperty('EngineEdition') <> 5 execute sp_executesql ");
            builder.AppendStringLiteral(SetReadCommittedSnapshotScript(databaseName));

            return(builder.unencodedStringBuilder.ToString());
        }
Пример #10
0
        private void AppendCreateSchema(string schema)
        {
            AppendSql("if (schema_id(");
            AppendStringLiteral(schema);
            AppendSql(") is null) exec(");

            // need to create a sub-command and escape it as a string literal as well...
            var schemaBuilder = new SqlDdlBuilder();

            schemaBuilder.AppendSql("create schema ");
            schemaBuilder.AppendIdentifier(schema);

            AppendStringLiteral(schemaBuilder.unencodedStringBuilder.ToString());
            AppendSql(");");
            AppendNewLine();
        }
Пример #11
0
        internal static string CreateDatabaseScript(string databaseName, string dataFileName, string logFileName)
        {
            var builder = new SqlDdlBuilder();

            builder.AppendSql("create database ");
            builder.AppendIdentifier(databaseName);
            if (null != dataFileName)
            {
                Debug.Assert(logFileName != null, "must specify log file with data file");
                builder.AppendSql(" on primary ");
                builder.AppendFileName(dataFileName);
                builder.AppendSql(" log on ");
                builder.AppendFileName(logFileName);
            }

            return(builder.unencodedStringBuilder.ToString());
        }
Пример #12
0
        internal static string CreateDatabaseScript(
            string databaseName,
            string dataFileName,
            string logFileName)
        {
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("create database ");
            sqlDdlBuilder.AppendIdentifier(databaseName);
            if (dataFileName != null)
            {
                sqlDdlBuilder.AppendSql(" on primary ");
                sqlDdlBuilder.AppendFileName(dataFileName);
                sqlDdlBuilder.AppendSql(" log on ");
                sqlDdlBuilder.AppendFileName(logFileName);
            }
            return(sqlDdlBuilder.unencodedStringBuilder.ToString());
        }
Пример #13
0
        internal static string CreateDatabaseExistsScript(string databaseName)
        {
            // This handles non-SQL Azure servers by using db_id() which will return a non null value for
            // a database on the server even if the login doesn't have "view any database" permission.
            // On SQL Azure db_id() only works for the current database, which means it will never work here
            // because the current database is master. In this case we fall back to the query from sys.databases.
            // This doesn't work for non-SQL Azure if the login does not have 'view any database'
            // permission, but that case was covered by db_id(). On SQL Azure there are no server class
            // securables, which means it is not possible to deny the login 'view any database' so in theory
            // if the user can connect to master then the sys.databases query will work.

            var builder = new SqlDdlBuilder();

            builder.AppendSql("IF db_id(");
            builder.AppendStringLiteral(databaseName);
            builder.AppendSql(") IS NOT NULL SELECT 1 ELSE SELECT Count(*) FROM sys.databases WHERE [name]=");
            builder.AppendStringLiteral(databaseName);
            return(builder.unencodedStringBuilder.ToString());
        }
Пример #14
0
        internal static string CreateGetDatabaseNamesBasedOnFileNameScript(string databaseFileName, bool useDeprecatedSystemTable)
        {
            var builder = new SqlDdlBuilder();

            builder.AppendSql("SELECT [d].[name] FROM ");
            AppendSysDatabases(builder, useDeprecatedSystemTable);
            builder.AppendSql(" AS [d] ");
            if (!useDeprecatedSystemTable)
            {
                builder.AppendSql("INNER JOIN sys.master_files AS [f] ON [f].[database_id] = [d].[database_id]");
            }
            builder.AppendSql(" WHERE [");
            if (useDeprecatedSystemTable)
            {
                builder.AppendSql("filename");
            }
            else
            {
                builder.AppendSql("f].[physical_name");
            }
            builder.AppendSql("]=");
            builder.AppendStringLiteral(databaseFileName);
            return(builder.unencodedStringBuilder.ToString());
        }
Пример #15
0
        internal static string CreateObjectsScript(
            StoreItemCollection itemCollection,
            bool createSchemas)
        {
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            foreach (EntityContainer entityContainer in itemCollection.GetItems <EntityContainer>())
            {
                IOrderedEnumerable <EntitySet> source = entityContainer.BaseEntitySets.OfType <EntitySet>().OrderBy <EntitySet, string>((Func <EntitySet, string>)(s => s.Name));
                if (createSchemas)
                {
                    foreach (string schema in (IEnumerable <string>) new HashSet <string>(source.Select <EntitySet, string>((Func <EntitySet, string>)(s => SqlDdlBuilder.GetSchemaName(s)))).OrderBy <string, string>((Func <string, string>)(s => s)))
                    {
                        if (schema != "dbo")
                        {
                            sqlDdlBuilder.AppendCreateSchema(schema);
                        }
                    }
                }
                foreach (EntitySet entitySet in (IEnumerable <EntitySet>)entityContainer.BaseEntitySets.OfType <EntitySet>().OrderBy <EntitySet, string>((Func <EntitySet, string>)(s => s.Name)))
                {
                    sqlDdlBuilder.AppendCreateTable(entitySet);
                }
                foreach (AssociationSet associationSet in (IEnumerable <AssociationSet>)entityContainer.BaseEntitySets.OfType <AssociationSet>().OrderBy <AssociationSet, string>((Func <AssociationSet, string>)(s => s.Name)))
                {
                    sqlDdlBuilder.AppendCreateForeignKeys(associationSet);
                }
            }
            return(sqlDdlBuilder.GetCommandText());
        }