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