protected CreateIndexStatement(IndexName indexName, Qualified<SchemaName, TableName> tableName, IndexOptionGroup indexOptions) {
			Debug.Assert(indexName != null);
			Debug.Assert(tableName != null);
			this.indexName = indexName;
			this.tableName = tableName;
			this.indexOptions = indexOptions;
		}
		public CreateColumnIndexStatement(Optional<UniqueToken> unique, ConstraintClusterToken clustered, IndexName indexName, Qualified<SchemaName, TableName> tableName, Sequence<IndexColumn> indexColumns, Sequence<ColumnName> columnNames, Predicate filter, IndexOptionGroup indexOptions)
				: base(indexName, tableName, indexOptions) {
			Debug.Assert(clustered != null);
			this.unique = unique.HasValue();
			this.clustered = clustered.Clustered;
			this.indexColumns = indexColumns.ToList();
			this.filter = filter;
			includeColumnNames = columnNames.ToList();
		}
		public ColumnUniqueConstraint(ConstraintName constraintName, ConstraintClusterToken clustered, IndexOptionGroup indexOptionGroup): base(constraintName, clustered, indexOptionGroup) {}
		public ColumnUniqueConstraint(ConstraintClusterToken clustered, IndexOptionGroup indexOptionGroup): this(null, clustered, indexOptionGroup) {}
		public CreateColumnIndexStatement(Optional<UniqueToken> unique, ConstraintClusterToken clustered, IndexName indexName, Qualified<SchemaName, TableName> tableName, Sequence<IndexColumn> indexColumns, Sequence<ColumnName> columnNames, IndexOptionGroup indexOptions)
				: this(unique, clustered, indexName, tableName, indexColumns, columnNames, null, indexOptions) {}
		public TablePrimaryKeyConstraint(ConstraintName constraintName, ConstraintClusterToken clustered, Sequence<IndexColumn> indexColumns, IndexOptionGroup indexOptionGroup): base(constraintName, clustered, indexColumns, indexOptionGroup) {}
		public TablePrimaryKeyConstraint(ConstraintClusterToken clustered, Sequence<IndexColumn> indexColumns, IndexOptionGroup indexOptionGroup): this(null, clustered, indexColumns, indexOptionGroup) {}
		public CreateXmlIndexStatement(IndexName indexName, Qualified<SchemaName, TableName> tableName, ColumnName columnName, IndexUsing indexUsing, IndexOptionGroup indexOptions)
			: base(indexName, tableName, indexOptions) {
			this.columnName = columnName;
			this.indexUsing = indexUsing;
		}
		protected ColumnUniqueConstraintBase(ConstraintName constraintName, ConstraintClusterToken clustered, IndexOptionGroup indexOptionGroup): base(constraintName) {
			this.indexOptionGroup = indexOptionGroup;
			this.clustered = clustered.Clustered;
		}
		public ColumnPrimaryKeyConstraint(ConstraintClusterToken clustered, IndexOptionGroup indexOptionGroup): this(null, clustered, indexOptionGroup) {}
		public CreatePrimaryXmlIndexStatement(IndexName indexName, Qualified<SchemaName, TableName> tableName, ColumnName columnName, IndexUsing indexUsing, IndexOptionGroup indexOptions) : base(indexName, tableName, columnName, indexUsing, indexOptions) { }
		protected TableUniqueConstraintBase(ConstraintName constraintName, ConstraintClusterToken clustered, Sequence<IndexColumn> indexColumns, IndexOptionGroup indexOptionGroup): base(constraintName) {
			this.indexOptionGroup = indexOptionGroup;
			this.clustered = clustered.Clustered;
			this.indexColumns = indexColumns.ToList();
		}