Example #1
0
        public void AppendForeignKeyConstraintFromReference(AST.Table.AstTableNode table, string refNameOverride, string refName, AST.Table.AstTableNode refTable)
        {
            TemplatePlatformEmitter tpe = new TemplatePlatformEmitter("ForeignKeyConstraintTemplate");
            tpe.Map("TableName", table.SchemaQualifiedName);

            string constraintName;
            if (!String.IsNullOrEmpty(refNameOverride))
            {
                constraintName = String.Format(CultureInfo.InvariantCulture, "[{0}]", refNameOverride);
            }
            else
            {
                constraintName = String.Format(
                    CultureInfo.InvariantCulture,
                    "[FK_{0}_{1}_{2}_{3}]",
                    table.Name,
                    refName,
                    refTable.Name,
                    refTable.PreferredKey.Columns[0].Column.Name);
            }

            if (constraintName.Length >= 128)
            {
                constraintName = String.Format(CultureInfo.InvariantCulture,"[{0}]",constraintName.Substring(0, 127));
            }

            tpe.Map("ConstraintName", constraintName);
            tpe.Map("Column", refName);
            tpe.Map("ForeignKeyTable", refTable.SchemaQualifiedName);
            tpe.Map("ForeignKeyColumn", refTable.PreferredKey.Columns[0].Column.Name);
            _foreignKeyBuilder.Append(tpe.Emit());
            _foreignKeyBuilder.Append("\n\n");
        }
Example #2
0
        public Package(AST.Task.AstPackageNode astNode)
            : base(astNode)
        {
            _DTSApplication = new DTS.Application();
            DtsPackage = new DTS.Package();
            DtsPackage.Name = StringManipulation.NameCleaner(Name);
            PackageType = String.IsNullOrEmpty(astNode.PackageType) ? "ETL" : astNode.PackageType;
            PackageFolder = astNode.PackageFolder;
            PackagePath = astNode.PackagePath;
            PackageProtectionLevel = astNode.ProtectionLevel;
            PackagePassword = astNode.PackagePassword;

            // vsabella: We thought about adding this in the Lowering phase.
            // The reason this was not placed in Lowering is that this variable must be available
            // before any other lowering can take place.  Additionally i needed a single place where the
            // variable name could remain constant and other lowering phase engines could refer to it.
            // PreEmit
            PackageRootVariable =
                new Variable(PackagePathRootVariableName)
                {
                    InheritFromPackageParentConfigurationString = "User::" + PackagePathRootVariableName,
                    ValueString = PathManager.TargetPath,
                    TypeCode = TypeCode.String
                };

            Children.Add(PackageRootVariable);
        }
Example #3
0
 public ForLoop(AST.Task.AstForLoopContainerTaskNode astNode)
     : base(astNode)
 {
     _initializerExpression = astNode.InitializerExpression;
     _loopTestExpression = astNode.LoopTestExpression;
     _countingExpression = astNode.CountingExpression;
 }
Example #4
0
 public Variable(AST.Task.AstVariableNode astNode) : base(astNode.Name)
 {
     TypeCode = (TypeCode)Enum.Parse(typeof(TypeCode), astNode.TypeCode.ToString());
     ValueString = astNode.Value;
     EvaluateAsExpression = astNode.EvaluateAsExpression;
     InheritFromPackageParentConfigurationString = astNode.InheritFromPackageParentConfigurationString;
     IsSystemVariable = astNode.IsSystemVariable;
 }
Example #5
0
 private void AppendUpdate(AST.Table.AstTableColumnBaseNode column, StringBuilder updateBuilder)
 {
     updateTemplateRequired = true;
     if (updateBuilder.Length > 0)
     {
         updateBuilder.Append(",");
     }
     updateBuilder.AppendFormat(CultureInfo.InvariantCulture, "TARGET.[{0}] = SOURCE.[{0}]", column.Name);
 }
Example #6
0
        private void AppendConstraintBase(AST.Table.AstTableKeyBaseNode constraint, string primaryKeyString, string unique)
        {
            string clustered = constraint.Clustered ? "CLUSTERED" : "NONCLUSTERED";
            string ignoreDupKey = constraint.IgnoreDupKey ? "IGNORE_DUP_KEY = ON" : "IGNORE_DUP_KEY = OFF";
            string padIndex = constraint.PadIndex ? "PAD_INDEX = ON" : "PAD_INDEX = OFF";
            string keys = BuildKeys(constraint);

            var te = new TemplatePlatformEmitter("ConstraintTemplate", String.Format(CultureInfo.InvariantCulture,"[{0}]",constraint.Name), unique + clustered, keys, "WITH(" + padIndex + "," + ignoreDupKey + ")", primaryKeyString);
            _constraintKeyBuilder.Append("," + te.Emit());
            _constraintKeyBuilder.AppendFormat(CultureInfo.InvariantCulture, "\n");
        }
Example #7
0
 public void AppendConstraint(AST.Table.AstTableKeyBaseNode keyBase)
 {
     if (keyBase is AST.Table.AstTablePrimaryKeyNode || keyBase is AST.Table.AstTableIdentityNode)
     {
         AppendConstraintBase(keyBase, "PRIMARY KEY", String.Empty);
     }
     else
     {
         AppendConstraintBase(keyBase, String.Empty, keyBase.Unique ? "UNIQUE " : " ");
     }
 }
Example #8
0
        private void AppendInsertValue(AST.Table.AstTableColumnBaseNode column, StringBuilder insertParamBuilder, StringBuilder insertValueBuilder)
        {
            if (insertParamBuilder.Length > 0)
            {
                insertParamBuilder.AppendFormat(CultureInfo.InvariantCulture, ",\n");
            }

            insertParamBuilder.AppendFormat(CultureInfo.InvariantCulture, "[{0}]", column.Name);

            if (insertValueBuilder.Length > 0)
            {
                insertValueBuilder.AppendFormat(CultureInfo.InvariantCulture, ",\n");
            }

            insertValueBuilder.AppendFormat(CultureInfo.InvariantCulture, "SOURCE.[{0}]", column.Name);
        }
Example #9
0
        private void AppendNotEqual(AST.Table.AstTableColumnBaseNode column, StringBuilder notEqualBuilder)
        {
            if (notEqualBuilder.Length > 0)
            {
                notEqualBuilder.AppendFormat(CultureInfo.InvariantCulture, "\nOR\n");
            }

            // Bug #3757, special handling for uniqueidentifier data type
            if (column.CustomType != null && column.CustomType.Equals("uniqueidentifier", StringComparison.OrdinalIgnoreCase))
            {
                notEqualBuilder.AppendFormat("COALESCE(TARGET.[{0}],CONVERT(uniqueidentifier,'00000000-0000-0000-0000-000000000000')) <> COALESCE(SOURCE.[{0}],CONVERT(uniqueidentifier,'00000000-0000-0000-0000-000000000000'))", column.Name);
            }
            else
            {
                notEqualBuilder.AppendFormat("COALESCE(TARGET.[{0}],'') <> COALESCE(SOURCE.[{0}],'')", column.Name);
            }
        }
Example #10
0
        public StoredProcTSqlEmitter(AST.Task.AstStoredProcNode astNode)
        {
            _name = astNode.SchemaQualifiedName;
            _body = astNode.Body;

            foreach (AST.Task.AstStoredProcColumnNode storedProcedureColumn in astNode.Columns)
            {
                string physicalType =
                    TSqlTypeTranslator.Translate(
                        storedProcedureColumn.ColumnType,
                        storedProcedureColumn.Length,
                        storedProcedureColumn.Precision,
                        storedProcedureColumn.Scale,
                        storedProcedureColumn.CustomType);

                AddColumn(storedProcedureColumn.Name, physicalType, storedProcedureColumn.Default, storedProcedureColumn.IsOutput, storedProcedureColumn.IsReadOnly);
            }
        }
Example #11
0
 public Sequence(AST.Task.AstContainerTaskNode astNode) : base(astNode)
 {
 }
Example #12
0
 public MergeTSqlEmitter(AST.Task.AstMergeTaskNode astNode)
 {
     _mergeTask = astNode;
 }
Example #13
0
        public void AppendIndex(string tableName, AST.Table.AstTableIndexNode index)
        {
            string unique = index.Unique ? "UNIQUE" : String.Empty;
            string clustered = index.Clustered ? "CLUSTERED" : "NONCLUSTERED";
            string dropExisting = index.DropExisting ? "DROP_EXISTING = ON" : "DROP_EXISTING = OFF";
            string ignoreDupKey = index.IgnoreDupKey ? "IGNORE_DUP_KEY = ON" : "IGNORE_DUP_KEY = OFF";
            string online = index.Online ? "ONLINE = ON" : "ONLINE = OFF";
            string padIndex = index.Online ? "PAD_INDEX = ON" : "PAD_INDEX = OFF";
            string sortInTempdb = index.SortInTempDB ? "SORT_IN_TEMPDB = ON" : "SORT_IN_TEMPDB = OFF";
            string properties = string.Format(CultureInfo.InvariantCulture, "{0},\n{1},\n{2},\n{3},\n{4}", padIndex, sortInTempdb, dropExisting, ignoreDupKey, online);
            string keys = BuildKeys(index.Columns);

            var te = new TemplatePlatformEmitter("CreateIndex", unique, clustered, String.Format(CultureInfo.InvariantCulture,"[{0}]",index.Name), tableName, keys, properties, string.Empty);
            _indexBuilder.Append(te.Emit());
            _indexBuilder.Append("\n");
        }
Example #14
0
        private static string BuildKeys(AST.Table.AstTableKeyBaseNode keyBase)
        {
            var keyBuilder = new StringBuilder();

            foreach (AST.Table.AstTableKeyColumnNode columnNode in keyBase.Columns)
            {
                ColumnsTSqlEmitter.CheckAndAppendSeparator(",", keyBuilder);
                keyBuilder.AppendFormat(CultureInfo.InvariantCulture, "[{0}] {1}", columnNode.Column.Name, columnNode.SortOrder);
            }
            return keyBuilder.ToString();
        }