private void getPartitioningGlobal()

in src/PDWScripter/PDWscripter.cs [1294:1386]


        private void getPartitioningGlobal ()
        {
            string TableKey = "";
            string SchemaName;
            string TableName;
            string tableKeyPrevious = "";
            TableSt TableStruct = new TableSt();
            partitionColumn = null;
            partitionLeftOrRight = null;
            partitionBoundaryClause = "";
            StringBuilder partitionspec = new StringBuilder();
            partitionBoundaries.Clear();

            cmd.CommandText =@"select schema_name(tbl.schema_id) as SchemaName,tbl.name as TableName,c.name,pf.boundary_value_on_right
                                from sys.tables tbl
                                    join sys.indexes i on (i.object_id = tbl.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 = tbl.object_id)
                                           join sys.columns c on(c.object_id = ic.object_id and c.column_id = ic.column_id)
                                                JOIN sys.data_spaces ds on i.data_space_id = ds.data_space_id
                                                    JOIN sys.partition_schemes ps on ps.data_space_id = ds.data_space_id
                                                        JOIN sys.partition_functions pf on pf.function_id = ps.function_id
                                                        order by schema_name(tbl.schema_id),tbl.name";

            rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                SchemaName = rdr.GetString(rdr.GetOrdinal("SchemaName"));
                TableName = rdr.GetString(rdr.GetOrdinal("TableName"));
                partitionColumn = rdr.GetString(rdr.GetOrdinal("name"));
                partitionLeftOrRight = ((bool)rdr.GetBoolean(rdr.GetOrdinal("boundary_value_on_right")) ? "RIGHT" : "LEFT");
                TableKey = SchemaName + "." + TableName;

                TableStruct = this.dbstruct.GetTable(TableKey);
                TableStruct.DBPartition.partitionColumn = partitionColumn;
                TableStruct.DBPartition.partitionLeftOrRight = partitionLeftOrRight;

            }
            rdr.Close();
            // get partitions boundaries
            TableStruct = new TableSt();
            cmd.CommandText = @"select  schema_name(tbl.schema_id) as SchemaName,tbl.name as TableName,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 
						JOIN sys.tables Tbl on si.object_id = Tbl.object_id
                        order by schema_name(tbl.schema_id),tbl.name,sp.partition_number";

            rdr = cmd.ExecuteReader();


            while (rdr.Read())
            {
                SchemaName = rdr.GetString(rdr.GetOrdinal("SchemaName"));
                TableName = rdr.GetString(rdr.GetOrdinal("TableName"));
                TableKey = SchemaName + "." + TableName;

                if (TableKey != tableKeyPrevious)
                {
                    if ( TableStruct.DBPartition.partitionColumn !="")
                    {
                        TableStruct.DBPartition.partitionBoundaries.AddRange(partitionBoundaries);
                    }
                    TableStruct = this.dbstruct.GetTable(TableKey);
                    partitionBoundaries.Clear();
                    tableKeyPrevious = TableKey;

                }

                if (TableStruct != null)
                {
                    partitionBoundaries.Add(new PartitionBoundary(
                                                 rdr.GetInt32(rdr.GetOrdinal("partition_number")),
                                                 rdr.GetValue(rdr.GetOrdinal("boundary_value")).ToString(),
                                                 rdr.GetString(rdr.GetOrdinal("boundary_value_type"))
                                                 ));
                }

            }

            if (TableKey != "" && TableStruct != null)
            {
                TableStruct.DBPartition.partitionBoundaries.AddRange(partitionBoundaries);
            }


            rdr.Close();
        }