コード例 #1
0
		/// <summary></summary>
		public override void CreatePrimaryKey()
		{
			if ( !IsOneToMany )
			{
				PrimaryKey pk = new PrimaryKey();
				foreach( Column col in Key.ColumnCollection )
				{
					pk.AddColumn( col );
				}

				bool nullable = false;
				foreach( Column col in Element.ColumnCollection )
				{
					if( col.IsNullable )
					{
						nullable = true;
					}
					pk.AddColumn( col );
				}

				// some databases (Postgres) will tolerate nullable
				// column in a primary key - others (DB2) won't
				if( !nullable )
				{
					CollectionTable.PrimaryKey = pk;
				}
			}
			else
			{
				// Create an index on the key columns?
			}
		}
コード例 #2
0
		public override void CreatePrimaryKey()
		{
			if (!IsOneToMany)
			{
				PrimaryKey pk = new PrimaryKey();
				pk.AddColumns(new SafetyEnumerable<Column>(Key.ColumnIterator));

				// index should be last column listed
				bool isFormula = false;
				foreach (ISelectable selectable in Index.ColumnIterator)
				{
					if(selectable.IsFormula)
						isFormula = true;
				}
				if (isFormula)
				{
					//if it is a formula index, use the element columns in the PK
					pk.AddColumns(new SafetyEnumerable<Column>(Element.ColumnIterator));
				}
				else
				{
					pk.AddColumns(new SafetyEnumerable<Column>(Index.ColumnIterator));
				}

				CollectionTable.PrimaryKey = pk;
			}
		}
コード例 #3
0
		/// <summary></summary>
		public override void CreatePrimaryKey()
		{
			if (!IsOneToMany)
			{
				PrimaryKey pk = new PrimaryKey();
				pk.AddColumns(new SafetyEnumerable<Column>(Identifier.ColumnIterator));
				CollectionTable.PrimaryKey = pk;
			}
			//else  // Create an index on the key columns?
		}
コード例 #4
0
		/// <summary></summary>
		public override void CreatePrimaryKey()
		{
			if ( !IsOneToMany )
			{
				PrimaryKey pk = new PrimaryKey();
				foreach( Column col in Identifier.ColumnCollection )
				{
					pk.AddColumn( col );
				}
				CollectionTable.PrimaryKey = pk;
			}
			//else  // Create an index on the key columns?
		}
コード例 #5
0
ファイル: AuditTable.cs プロジェクト: Mrding/Ribbon
    protected virtual void CopyPrimaryKey(Table dataTable,
      Table auditTable)
    {
      if (dataTable.PrimaryKey != null)
      {
        var pk = new PrimaryKey();

        pk.AddColumns(
          from column in dataTable.PrimaryKey.ColumnIterator
          select auditTable.GetColumn(column));

        auditTable.PrimaryKey = pk;
      }
    }
コード例 #6
0
		public override void CreatePrimaryKey()
		{
			if (!IsOneToMany)
			{
				PrimaryKey pk = new PrimaryKey();

				foreach (Column col in Key.ColumnCollection)
				{
					pk.AddColumn(col);
				}

				// Index should be last column listed
				foreach (Column col in Index.ColumnCollection)
				{
					pk.AddColumn(col);
				}

				CollectionTable.PrimaryKey = pk;
			}
		}
コード例 #7
0
ファイル: PersistentClass.cs プロジェクト: zibler/zibler
        /// <summary>
        /// Creates the <see cref="PrimaryKey"/> for the <see cref="Table"/>
        /// this type is persisted in.
        /// </summary>
        /// <param name="dialect">The <see cref="Dialect.Dialect"/> that is used to Alias columns.</param>
        public virtual void CreatePrimaryKey(Dialect.Dialect dialect)
        {
            //Primary key constraint
            PrimaryKey pk = new PrimaryKey();
            Table table = Table;
            pk.Table = table;
            pk.Name = PKAlias.ToAliasString(table.Name, dialect);
            table.PrimaryKey = pk;

            pk.AddColumns(new SafetyEnumerable<Column>(Key.ColumnIterator));
        }
コード例 #8
0
ファイル: Join.cs プロジェクト: jlevitt/nhibernate-core
		public void CreatePrimaryKey(Dialect.Dialect dialect)
		{
			//Primary key constraint
			PrimaryKey pk = new PrimaryKey();
			pk.Table = table;
			pk.Name = PK_ALIAS.ToAliasString(table.Name, dialect);
			table.PrimaryKey = pk;

			pk.AddColumns(Key.ColumnIterator.OfType<Column>());
		}
コード例 #9
0
		/// <summary>
		/// Creates the <see cref="PrimaryKey"/> for the <see cref="Table"/>
		/// this type is persisted in.
		/// </summary>
		/// <param name="dialect">The <see cref="Dialect.Dialect"/> that is used to Alias columns.</param>
		public virtual void CreatePrimaryKey(Dialect.Dialect dialect)
		{
			PrimaryKey pk = new PrimaryKey();
			pk.Table = table;
			pk.Name = PKAlias.ToAliasString(table.Name, dialect);
			table.PrimaryKey = pk;

			foreach (Column col in Key.ColumnCollection)
			{
				pk.AddColumn(col);
			}
		}
コード例 #10
0
		/// <summary>
		/// Constructor for creating a constraint from a Hibnerate PrimaryKey object.
		/// </summary>
		/// <param name="table"></param>
		/// <param name="constraint"></param>
		internal ConstraintInfo(Table table, PrimaryKey constraint)
			: this("PK_", table.Name, constraint.ColumnIterator, null)
		{
		}
コード例 #11
0
ファイル: Table.cs プロジェクト: rytmis/nhibernate-core
        /// <summary>
        /// Generates the SQL string to create this Table in the database.
        /// </summary>
        /// <param name="dialect">The <see cref="Dialect"/> to use for SQL rules.</param>
        /// <param name="p"></param>
        /// <param name="defaultCatalog"></param>
        /// <param name="defaultSchema"></param>
        /// <returns>
        /// A string that contains the SQL to create this Table, Primary Key Constraints
        /// , and Unique Key Constraints.
        /// </returns>
        public string SqlCreateString(Dialect.Dialect dialect, IMapping p, string defaultCatalog, string defaultSchema)
        {
            StringBuilder buf =
                new StringBuilder(HasPrimaryKey ? dialect.CreateTableString : dialect.CreateMultisetTableString).Append(' ').Append(
                    GetQualifiedName(dialect, defaultCatalog, defaultSchema)).Append(" (");

            bool identityColumn = idValue != null && idValue.IsIdentityColumn(dialect);

            // try to find out the name of the pk to create it as identity if the
            // identitygenerator is used
            string pkname = null;

            if (HasPrimaryKey && identityColumn)
            {
                foreach (Column col in PrimaryKey.ColumnIterator)
                {
                    pkname = col.GetQuotedName(dialect);                     //should only go through this loop once
                }
            }

            bool commaNeeded = false;

            foreach (Column col in ColumnIterator)
            {
                if (commaNeeded)
                {
                    buf.Append(StringHelper.CommaSpace);
                }
                commaNeeded = true;

                buf.Append(col.GetQuotedName(dialect)).Append(' ');

                if (identityColumn && col.GetQuotedName(dialect).Equals(pkname))
                {
                    // to support dialects that have their own identity data type
                    if (dialect.HasDataTypeInIdentityColumn)
                    {
                        buf.Append(col.GetSqlType(dialect, p));
                    }
                    buf.Append(' ').Append(dialect.GetIdentityColumnString(col.GetSqlTypeCode(p).DbType));
                }
                else
                {
                    buf.Append(col.GetSqlType(dialect, p));

                    if (!string.IsNullOrEmpty(col.DefaultValue))
                    {
                        buf.Append(" default ").Append(col.DefaultValue).Append(" ");
                    }

                    if (col.IsNullable)
                    {
                        buf.Append(dialect.NullColumnString);
                    }
                    else
                    {
                        buf.Append(" not null");
                    }
                }

                if (col.IsUnique)
                {
                    if (dialect.SupportsUnique)
                    {
                        buf.Append(" unique");
                    }
                    else
                    {
                        UniqueKey uk = GetUniqueKey(col.GetQuotedName(dialect) + "_");
                        uk.AddColumn(col);
                    }
                }

                if (col.HasCheckConstraint && dialect.SupportsColumnCheck)
                {
                    buf.Append(" check( ").Append(col.CheckConstraint).Append(") ");
                }

                if (string.IsNullOrEmpty(col.Comment) == false)
                {
                    buf.Append(dialect.GetColumnComment(col.Comment));
                }
            }
            if (HasPrimaryKey && (dialect.GenerateTablePrimaryKeyConstraintForIdentityColumn || !identityColumn))
            {
                buf.Append(StringHelper.CommaSpace).Append(PrimaryKey.SqlConstraintString(dialect, defaultSchema));
            }

            foreach (UniqueKey uk in UniqueKeyIterator)
            {
                buf.Append(',').Append(uk.SqlConstraintString(dialect));
            }

            if (dialect.SupportsTableCheck)
            {
                foreach (string checkConstraint in checkConstraints)
                {
                    buf.Append(", check (").Append(checkConstraint).Append(") ");
                }
            }

            if (!dialect.SupportsForeignKeyConstraintInAlterTable)
            {
                foreach (ForeignKey foreignKey in ForeignKeyIterator)
                {
                    if (foreignKey.HasPhysicalConstraint)
                    {
                        buf.Append(",").Append(foreignKey.SqlConstraintString(dialect, foreignKey.Name, defaultCatalog, defaultSchema));
                    }
                }
            }

            buf.Append(StringHelper.ClosedParen);

            if (string.IsNullOrEmpty(comment) == false)
            {
                buf.Append(dialect.GetTableComment(comment));
            }
            buf.Append(dialect.TableTypeString);

            return(buf.ToString());
        }