public DataTable GetRequestedVariables(DbConnection conn)
{
_log.Debug("Processing requested variables... ");
DataTable dt = null;
if (!string.IsNullOrEmpty(DesiredVariablesFilename))
{
DesiredColumnsReader fileReader = new DesiredColumnsReader();
bool importSucceeded = fileReader.ImportDesiredVariables(conn, DbClient,
this.DesiredVariablesFilename, DbConstants.TABLE_DesiredColumns);
if (importSucceeded)
{
string getRequestedCount = string.Format(
@"SELECT * FROM ""{0}"" ;",
DbConstants.TABLE_DesiredColumns);
DataTable desiredVars = DataClient.GetMagicTable(conn, DbClient, getRequestedCount);
int numDesired = desiredVars.Rows.Count;
_log.DebugFormat("Variable file {0} imported successfully", this.DesiredVariablesFilename);
string getRequestedVariablesSQL = string.Format(
@"SELECT columnMappings.CENSUS_TABLE_ID,
columnMappings.COLNO,
columnMappings.SEQNO,
{0}.CUSTOM_COLUMN_NAME AS COLNAME
FROM columnMappings, ""{0}""
WHERE columnMappings.CENSUS_TABLE_ID = {0}.CENSUS_TABLE_ID;",
DbConstants.TABLE_DesiredColumns);
dt = DataClient.GetMagicTable(conn, DbClient, getRequestedVariablesSQL);
if ((dt == null) || (numDesired != dt.Rows.Count))
{
_log.Warn("I couldn't find one or more of the variables you requested.");
HashSet<string> foundVarsSet = new HashSet<string>();
if (dt != null)
{
foreach (DataRow dr in dt.Rows)
{
foundVarsSet.Add(dr["CENSUS_TABLE_ID"] as string);
}
}
foreach (DataRow dr in desiredVars.Rows)
{
var varName = dr["CENSUS_TABLE_ID"] as string;
if (!foundVarsSet.Contains(varName))
{
_log.ErrorFormat("Could not find requested variable \"{0}\"", varName);
}
}
_log.Debug("Processing requested variables... Done -- with errors");
//make tests pass
if (dt.Rows.Count == 0)
return null;
return dt;
}
}
else
{
_log.Warn("Processing requested variables... Failed!");
return null;
}
}
else
{
_log.Debug("No variables file specified");
}
_log.Debug("Processing requested variables... Done!");
return dt;
}