in src/PDWScripter/PDWscripter.cs [923:1002]
private void getClusteredIndex(Boolean GetStructure, Boolean SourceFromFile)
{
clusteredCols.Clear();
clusteredClause = "";
StringBuilder clusteredspec = new StringBuilder();
Boolean isCCI = false;
if (!SourceFromFile)
{
cmd.CommandText =
"select i.key_ordinal, c.name, i.is_descending_key, si.[type] as index_type ,si.name as indexname " +
"from sys.indexes si " +
"left join sys.index_columns i on i.object_id = si.object_id " +
"left join sys.columns c on c.column_id = i.column_id and c.object_id = i.object_id " +
"where i.index_id = 1 and si.[type] <> 2 and " +
"i.object_id = (select object_id from sys.tables where schema_name(schema_id) + '.' + name = '" + sourceTable + "') " +
"and i.partition_ordinal = 0" +
"order by key_ordinal ";
rdr = cmd.ExecuteReader();
string clusterindexname = string.Empty;
if (rdr.HasRows)
{
while (rdr.Read())
{
if (clusterindexname == string.Empty)
clusterindexname = rdr.GetString(rdr.GetOrdinal("indexname"));
clusteredCols.Add(new IndexColumnDef(
rdr.GetByte(rdr.GetOrdinal("key_ordinal")),
rdr.GetString(rdr.GetOrdinal("name")),
rdr.GetBoolean(rdr.GetOrdinal("is_descending_key")),
rdr.GetByte(rdr.GetOrdinal("index_type"))
));
}
}
rdr.Close();
if (GetStructure)
{
dbstruct.GetTable(sourceTable).ClusteredIndexName = clusterindexname;
dbstruct.GetTable(sourceTable).clusteredcols.AddRange(clusteredCols);
return;
}
}
else
{
// get definition from file structure
clusteredCols = dbstruct.GetTable(sourceTable).clusteredcols;
}
foreach (IndexColumnDef i in clusteredCols.OrderBy(o => o.key_ordinal))
{
if (i.index_type == 5) // CCI
{
isCCI = true;
clusteredspec.Append("CLUSTERED COLUMNSTORE INDEX");
break;
}
if (i.key_ordinal > 1)
{
clusteredspec.Append("\r\n,");
}
else
{
clusteredspec.Append("CLUSTERED INDEX (");
}
clusteredspec.Append("[" + i.name + "]" + (i.is_descending_key ? " DESC " : ""));
}
if (clusteredspec.Length > 0 && !isCCI)
{
clusteredspec.Append(")");
}
else if (clusteredClause.Length == 0 && !isCCI)
{ clusteredspec.Append("HEAP"); }
clusteredClause = clusteredspec.ToString();
}