private void getClusteredIndex()

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();
        }