in src/PDWScripter/PDWscripter.cs [1220:1292]
private void getStats(Boolean GetStructure, Boolean SourceFromFile)
{
stats.Clear();
statsClause = "";
StringBuilder statspec = new StringBuilder();
if (!SourceFromFile)
{
cmd.CommandText =
"select s.name as stat_name, sc.stats_column_id, c.name, has_filter, filter_definition " +
"from sys.stats s " +
"join sys.stats_columns sc on s.stats_id = sc.stats_id and s.object_id = sc.object_id " +
"join sys.columns c on c.column_id = sc.column_id and c.object_id = sc.object_id " +
"where s.object_id = (select object_id from sys.tables where schema_name(schema_id) + '.' + name = '" + sourceTable + "') " +
"and user_created=1 " +
"order by s.name, sc.stats_column_id ";
rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
string statname = "";
StatDef statdef = null;
while (rdr.Read())
{
if (statname != rdr.GetString(rdr.GetOrdinal("stat_name")))
{
statname = rdr.GetString(rdr.GetOrdinal("stat_name"));
statdef = new StatDef(statname);
if (!(rdr.IsDBNull(rdr.GetOrdinal("filter_definition"))))
statdef.filter = rdr.GetString(rdr.GetOrdinal("filter_definition"));
stats.Add(statdef);
if (!GetStructure)
{
//no further steps needed
}
else
{
//adding stat definition to database structure
dbstruct.GetTable(sourceTable).statistics.Add(statdef);
}
}
statdef.cols.Add(new StatColumnDef(
rdr.GetInt32(rdr.GetOrdinal("stats_column_id")),
rdr.GetString(rdr.GetOrdinal("name"))
));
}
}
rdr.Close();
if (GetStructure)
{
return;
}
}
else
{
// retrieve stats from dbstruct from json file
stats.AddRange(dbstruct.GetTable(sourceTable).statistics);
}
foreach (StatDef statdef in stats)
{
statspec.Append(buildCreateStatisticsText(statdef,destTable));
}
statsClause = statspec.ToString();
}