public override string GetObjectName() { if (_functiondef.Name.IsEmpty()) { return(QueryGeneratorHelper.GetSafeSqlName(_info.Name)); } return(QueryGeneratorHelper.GetSafeSqlName(_functiondef.Name)); }
private string GetSqlReturnType() { if (_functiondef.TableDefinition.IsEmpty()) { return(QueryGeneratorHelper.GetSqlType(_info.ReturnType, _schema)); } else { return(" TABLE ( \r\n" + _functiondef.TableDefinition + "\r\n)"); } }
/// <summary> /// </summary> /// <returns> </returns> protected string GetArguments() { var args = new List <string>(); foreach (var parameterInfo in _info.GetParameters()) { args.Add(string.Format("@{0} {1}", parameterInfo.Name, QueryGeneratorHelper.GetSqlType(parameterInfo.ParameterType, _schema))); } return(string.Join(",", args.ToArray())); }
private static IEnumerable <string> GetCreateCustomLibrariesScripts(SqlInstallerConsoleProgramArgs args, List <AssemblyName> customdepends, Assembly assembly) { var dir = Path.GetDirectoryName(Path.GetFullPath(args.AssemblyName + ".dll")); foreach (var dep in customdepends) { yield return (string.Format( @" --SQLINSTALL: Create assembly {0} if not exists(select assembly_id from sys.assemblies where name='{0}') CREATE ASSEMBLY [{0}] AUTHORIZATION dbo FROM {1} WITH PERMISSION_SET = UNSAFE else begin begin try ALTER ASSEMBLY [{0}] FROM {1} WITH PERMISSION_SET = UNSAFE end try begin catch declare @message nvarchar(max) set @message = ERROR_MESSAGE() if @message not like '%MVID%' begin declare @severity int set @severity = ERROR_SEVERITY() declare @state int set @state = ERROR_STATE() raiserror(@message,@severity,@state) end end catch end ", dep.Name, QueryGeneratorHelper.GetAssemblyBits(Path.Combine(dir, dep.Name + ".dll")))); } yield return (string.Format( @" --SQLINSTALL: Create assembly {0} CREATE ASSEMBLY [{0}] AUTHORIZATION dbo FROM {1} WITH PERMISSION_SET = UNSAFE ", assembly.GetName().Name, QueryGeneratorHelper.GetAssemblyBits(Path.Combine(dir, assembly.GetName().Name + ".dll"))) ); }
private static IEnumerable <string> GetDatabasePrepareScripts(SqlInstallerConsoleProgramArgs args, string dbname) { yield return(string.Format( @"--SQLINSTALL: USE DATABASE use {0}", dbname)); yield return(string.Format( @"--SQLINSTALL: SET DATABASE TRUSTWORTHY ALTER DATABASE {0} SET TRUSTWORTHY ON", dbname)); yield return (@"--SQLINSTALL: SET CLR ON sp_configure 'clr enabled', 1 "); yield return (@"--SQLINSTALL: RECONFIGURE reconfigure "); yield return (@"--SQLINSTALL: Normalize owner EXEC sp_changedbowner 'sa' "); yield return(string.Format( @"--SQLINSTALL: Normalize authorization ALTER AUTHORIZATION ON DATABASE::{0} to sa ", dbname)); yield return(string.Format( @"--SQLINSTALL: CHECK SCHEMA if SCHEMA_ID('{0}') is null {1} ", args.Schema, QueryGeneratorHelper.GenerateExecuteSql("create schema {0}", args.Schema))); }
/// <summary> /// Generates set of commands to execute on SqlServer /// </summary> /// <param name="args"> </param> /// <returns> </returns> public IEnumerable <string> GenerateScripts(SqlInstallerConsoleProgramArgs args) { _args = args; var assembly = args.LoadAssembly(); var sysdepends = (assembly.GetReferencedAssemblies().Where( x => x.Name.StartsWith("System.") && x.Name != "System.Data" && x.Name != "System.Xml" && x.Name != "System")). ToList(); var customdepends = assembly.GetReferencedAssemblies().Where( x => !(x.Name.StartsWith("System") || x.Name == "mscorlib" || x.Name.StartsWith("Microsoft."))).ToList(); foreach (var assemblyName in customdepends.ToArray()) { var a = Assembly.Load(assemblyName); foreach ( var ccd in a.GetReferencedAssemblies().Where( x => !(x.Name.StartsWith("System") || x.Name == "mscorlib" || x.Name.StartsWith("Microsoft.")))) { if (!customdepends.Any(x => x.Name == ccd.Name)) { customdepends.Add(ccd); } } } foreach (var assemblyName in customdepends) { var a = Assembly.Load(assemblyName); foreach ( var csd in a.GetReferencedAssemblies().Where( x => x.Name.StartsWith("System") && x.Name != "System.Data" && x.Name != "System.Xml" && x.Name != "System")) { if (!sysdepends.Any(x => x.Name == csd.Name)) { sysdepends.Add(csd); } } } customdepends.Sort((a, b) => { var aa = Assembly.Load(a); var ba = Assembly.Load(b); if (aa.GetReferencedAssemblies().Any(x => x.Name == b.Name)) { return(1); } if (ba.GetReferencedAssemblies().Any(x => x.Name == a.Name)) { return(-1); } return(0); }); var items = GetExportedItems(assembly, args.Schema); var dbname = QueryGeneratorHelper.GetSafeSqlName(args.Database); //1 Prepare database if (!args.NoScriptDatabase) { foreach (var p in GetDatabasePrepareScripts(args, dbname)) { yield return(p); } } //2 drop existed items foreach (var item in items.Where(x => !(x is UserTypeWrapper))) { yield return(item.GetDropScript()); } foreach (var item in items.Where(x => (x is UserTypeWrapper))) { yield return(item.GetDropScript()); } //3 Prepare system libs and drop referenced libs foreach (var p in GetCleanupAssembliesScripts(sysdepends, customdepends, assembly)) { yield return(p); } //4 generate assemblies if (!_args.CleanOnly) { foreach (var p in GetCreateCustomLibrariesScripts(args, customdepends, assembly)) { yield return(p); } foreach (var item in items.Where(x => (x is UserTypeWrapper))) { yield return(item.GetCreateScript()); } foreach (var item in items.Where(x => !(x is UserTypeWrapper))) { yield return(item.GetCreateScript()); } } }