private void getPartitioning()

in src/PDWScripter/PDWscripter.cs [1387:1476]


        private void getPartitioning(Boolean GetStructure, Boolean SourceFromFile)
        {
            partitionColumn = null;
            partitionLeftOrRight = null;
            partitionBoundaryClause = "";
            StringBuilder partitionspec = new StringBuilder();
            partitionBoundaries.Clear();
            if (!SourceFromFile)
            {
                cmd.CommandText =
                    "select c.name " +
                    "from  sys.tables t " +
                    "join  sys.indexes i on(i.object_id = t.object_id and i.index_id < 2) " +
                    "join  sys.index_columns  ic on(ic.partition_ordinal > 0 " +
                    "and ic.index_id = i.index_id and ic.object_id = t.object_id) " +
                    "join  sys.columns c on(c.object_id = ic.object_id " +
                    "and c.column_id = ic.column_id) " +
                    "where t.object_id  = (select object_id from sys.tables where schema_name(schema_id) + '.' + name = '" + sourceTable + "')  ";
                partitionColumn = (string)cmd.ExecuteScalar();

                if (partitionColumn != null)
                {

                    cmd.CommandText =
                        "select pf.boundary_value_on_right from sys.partition_functions pf " +
                        "JOIN sys.partition_schemes ps on pf.function_id=ps.function_id " +
                        "JOIN sys.data_spaces ds on ps.data_space_id = ds.data_space_id " +
                        "JOIN sys.indexes si on si.data_space_id = ds.data_space_id " +
                        "WHERE si.object_id = (select object_id from sys.tables where schema_name(schema_id) + '.' + name = '" + sourceTable + "') ";
                    partitionLeftOrRight = ((bool)cmd.ExecuteScalar() ? "RIGHT" : "LEFT");

                    cmd.CommandText =
                        "select  cast(sp.partition_number as int) as partition_number , prv.value as boundary_value, lower(sty.name) as boundary_value_type " +
                        "from sys.tables st join sys.indexes si on st.object_id = si.object_id and si.index_id <2" +
                        "join sys.partitions sp on sp.object_id = st.object_id " +
                        "and sp.index_id = si.index_id " +
                        "join sys.partition_schemes ps on ps.data_space_id = si.data_space_id " +
                        "join sys.partition_range_values prv on prv.function_id = ps.function_id " +
                        "join sys.partition_parameters pp on pp.function_id = ps.function_id " +
                        "join sys.types sty on sty.user_type_id = pp.user_type_id " +
                        "and prv.boundary_id = sp.partition_number " +
                        "where st.object_id = (select object_id from sys.tables where schema_name(schema_id) + '.' + name = '" + sourceTable + "')  " +
                        "order by sp.partition_number ";

                    rdr = cmd.ExecuteReader();

                    if (rdr.HasRows)
                    {
                        while (rdr.Read())
                        {
                            partitionBoundaries.Add(new PartitionBoundary(
                                rdr.GetInt32(rdr.GetOrdinal("partition_number")),
                                rdr.GetValue(rdr.GetOrdinal("boundary_value")).ToString(),
                                rdr.GetString(rdr.GetOrdinal("boundary_value_type"))
                                ));
                        }
                    }

                    rdr.Close();
                    if (GetStructure)
                    {
                        dbstruct.GetTable(sourceTable).DBPartition.partitionColumn = partitionColumn;
                        dbstruct.GetTable(sourceTable).DBPartition.partitionLeftOrRight = partitionLeftOrRight;
                        dbstruct.GetTable(sourceTable).DBPartition.partitionBoundaries = partitionBoundaries;

                    }
                }
            }
            else
            {
                partitionBoundaries = dbstruct.GetTable(sourceTable).DBPartition.partitionBoundaries;
                partitionColumn = dbstruct.GetTable(sourceTable).DBPartition.partitionColumn;
                partitionLeftOrRight = dbstruct.GetTable(sourceTable).DBPartition.partitionLeftOrRight;
            }
            foreach (PartitionBoundary b in partitionBoundaries)
            {
                if (b.partition_number > 1)
                {
                    partitionspec.Append("\r\n,");
                }
                partitionspec.Append("N'" + b.boundary_value + "'");
            }
            if (partitionspec.Length > 0)
            {
                partitionspec.Append(")");
            }


            partitionBoundaryClause = partitionspec.ToString();
        }