using System;
using System.Data;
using System.Collections;
namespace SQLToNeo.Model{
/// <summary>
/// RestrictionChecker
/// </summary>
public class RestrictionChecker
{
private DataSet _currentDataset;
private ArrayList _conflicts;
#region Porperty get Conflicts
public ArrayList Conflicts
{
get { return _conflicts; }
}
#endregion
public RestrictionChecker()
{
_currentDataset = new DataSet();
_conflicts = new ArrayList();
}
public void Validate(DataSet ds)
{
_currentDataset = ds;
PrimaryKeyConflicts();
ForeignKeyConflicts("foreignkey");
ForeignKeyConflicts("iforeignkey");
}
private void PrimaryKeyConflicts()
{
foreach(DataRow dr in _currentDataset.Tables["column"].Rows)
{
if(dr["create"].ToString().Length == 0)
continue;
if(Convert.ToBoolean(dr["primaryKey"].ToString())
&& !Convert.ToBoolean(dr["create"].ToString()))
{
string c = "Conflict: Col '" + dr["javaName"].ToString() + "' is primray key of table '" + GetTableName(dr["tableid"].ToString()) + "' and must be build!";
_conflicts.Add(c);
}
}
}
private void ForeignKeyConflicts(string table)
{
foreach(DataRow dr in _currentDataset.Tables[table].Rows)
{
string select = "name = '"+dr["foreign"].ToString()+"' and tableid = '"+ GetTableId(dr["foreigntable"].ToString()) +"'";
DataRow[] dra = _currentDataset.Tables["column"].Select(select);
if(dra.Length > 0)
{
if(!Convert.ToBoolean(dra[0]["create"].ToString())
&& Convert.ToBoolean(dr["create"].ToString()))
{
string c = "Conflict: The "+table+" col '"+dra[0]["name"].ToString()+"' of table '"+GetTableName(dr["tableid"].ToString())+"' is set create to and the relation is set create to true!";
_conflicts.Add(c);
}
if(!CreateTable(dra[0]["tableid"].ToString())
&& Convert.ToBoolean(dr["create"].ToString()))
{
string c = "Conflict: The table '"+GetTableName(dra[0]["tableid"].ToString())+"' is set to create = false, but there where "+table+" relations from table '"+GetTableName(dr["tableid"].ToString())+"' that points to cols of that table";
_conflicts.Add(c);
}
}
}
}
private bool CreateTable(string tableid)
{
DataRow[] dra = _currentDataset.Tables["table"].Select("id = '"+tableid+"'");
if(dra.Length > 0)
return Convert.ToBoolean(dra[0]["create"].ToString());
return false;
}
private string GetTableId(string tablename)
{
DataRow[] dra = _currentDataset.Tables["table"].Select("name = '" + tablename + "'");
if(dra.Length > 0)
return dra[0]["id"].ToString();
return "Unknown";
}
private string GetTableName(string tableid)
{
DataRow[] dra = _currentDataset.Tables["table"].Select("id = '"+tableid+"'");
if(dra.Length > 0)
return dra[0]["name"].ToString();
return "Unknown";
}
}
}
|