예제 #1
0
        public override void Emit(TextWriter outputWriter)
        {
            if (TableNavigator.Select("rc:DefaultValues/rc:Value", VulcanPackage.VulcanConfig.NamespaceManager).Count == 0)
            {
                outputWriter.Flush();
                return;
            }

            StringBuilder columnBuilder = new StringBuilder();

            bool containsIdentities = _tableHelper.KeyColumnType == KeyColumnType.Identity;

            foreach (XPathNavigator nav in TableNavigator.Select("rc:Columns/rc:Column", VulcanPackage.VulcanConfig.NamespaceManager))
            {
                /* Build Column List */
                string columnName = nav.SelectSingleNode("@Name", VulcanPackage.VulcanConfig.NamespaceManager).Value;

                columnBuilder.AppendFormat(
                    "[{0}],",
                    columnName
                    );
            }

            columnBuilder.Remove(columnBuilder.Length - 1, 1);

            if (containsIdentities)
            {
                outputWriter.Write("\n");
                outputWriter.Write(String.Format(System.Globalization.CultureInfo.InvariantCulture, "\nSET IDENTITY_INSERT {0} ON\n", TableName));
            }
            TemplateEmitter te = new TemplateEmitter("InsertDefaultValues", VulcanPackage, null);

            outputWriter.Write("\n");
            foreach (XPathNavigator nav in TableNavigator.Select("rc:DefaultValues/rc:Value", VulcanPackage.VulcanConfig.NamespaceManager))
            {
                te.SetParameters(TableName, columnBuilder.ToString(), nav.Value);
                te.Emit(outputWriter);
                outputWriter.Write("\n");;
            }

            if (containsIdentities)
            {
                outputWriter.Write(String.Format(System.Globalization.CultureInfo.InvariantCulture, "\nSET IDENTITY_INSERT {0} OFF", TableName));
            }

            outputWriter.Write("\nGO\n");
            outputWriter.Flush();
        }
예제 #2
0
        public override void Emit(TextWriter outputWriter)
        {
            TemplateEmitter te = new TemplateEmitter("CreateIndex", VulcanPackage, null);

            foreach (XPathNavigator nav in TableNavigator.Select("rc:Indexes/rc:Index", VulcanPackage.VulcanConfig.NamespaceManager))
            {
                string indexName = nav.SelectSingleNode("@Name") == null ? null : nav.SelectSingleNode("@Name").Value;

                string unique = nav.SelectSingleNode("@Unique", VulcanPackage.VulcanConfig.NamespaceManager).ValueAsBoolean
                                                     ? "UNIQUE"
                                                     : "";

                string clustered = nav.SelectSingleNode("@Clustered", VulcanPackage.VulcanConfig.NamespaceManager).ValueAsBoolean
                                                     ? "CLUSTERED"
                                                     : "NONCLUSTERED";

                string dropExisting = nav.SelectSingleNode("@DropExisting", VulcanPackage.VulcanConfig.NamespaceManager).ValueAsBoolean
                                                     ? "DROP_EXISTING = ON"
                                                     : "DROP_EXISTING = OFF";

                string ignoreDupKey = nav.SelectSingleNode("@IgnoreDupKey", VulcanPackage.VulcanConfig.NamespaceManager).ValueAsBoolean
                                                     ? "IGNORE_DUP_KEY = ON"
                                                     : "IGNORE_DUP_KEY = OFF";

                string online = nav.SelectSingleNode("@Online", VulcanPackage.VulcanConfig.NamespaceManager).ValueAsBoolean
                                                     ? "ONLINE = ON"
                                                     : "ONLINE = OFF";

                string padIndex = nav.SelectSingleNode("@PadIndex", VulcanPackage.VulcanConfig.NamespaceManager).ValueAsBoolean
                                                     ? "PAD_INDEX = ON"
                                                     : "PAD_INDEX = OFF";

                string sortInTempdb = nav.SelectSingleNode("@SortInTempdb", VulcanPackage.VulcanConfig.NamespaceManager).ValueAsBoolean
                                                     ? "SORT_IN_TEMPDB = ON"
                                                     : "SORT_IN_TEMPDB = OFF";

                StringBuilder columnsBuilder   = new StringBuilder();
                StringBuilder indexNameBuilder = new StringBuilder("IX_");
                indexNameBuilder.Append(TableName);

                outputWriter.Write("\n");
                foreach (XPathNavigator columnNav in nav.Select("rc:Column", VulcanPackage.VulcanConfig.NamespaceManager))
                {
                    // This should use a Column Emitter which has callbacks and such...
                    //string componentName = nav.SelectSingleNode("@Name", VulcanPackage.NamespaceManager).Value;
                    string name      = columnNav.SelectSingleNode("@Name", VulcanPackage.VulcanConfig.NamespaceManager).Value;
                    string sortOrder = columnNav.SelectSingleNode("@SortOrder", VulcanPackage.VulcanConfig.NamespaceManager).Value;

                    columnsBuilder.AppendFormat(
                        "[{0}] {1},\n",
                        name,
                        sortOrder
                        );
                    indexNameBuilder.AppendFormat("_{0}", name);
                }
                columnsBuilder.Replace(",", "", columnsBuilder.Length - 2, 1);
                // Remove any dots which happen to show up in the name
                indexNameBuilder.Replace(".", "_");

                if (!string.IsNullOrEmpty(indexName))
                {
                    indexNameBuilder = new StringBuilder(indexName);  // Throw out the old name :) We got ourselves a better one.
                }

                te.SetParameters(
                    unique,
                    clustered,
                    indexNameBuilder.ToString(),
                    TableName,
                    columnsBuilder.ToString(),
                    String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0},\n{1},\n{2},\n{3},\n{4}", padIndex, sortInTempdb, dropExisting, ignoreDupKey, online)
                    );

                te.Emit(outputWriter);
                outputWriter.Flush();
            }
        }