SQLCE - about to throw the switch!

This commit is contained in:
kudzu_cp 2012-07-30 22:49:46 +00:00
parent 1360d9d3db
commit 0d439e1d9b

View file

@ -232,7 +232,7 @@ namespace Cosmos.Debug.Common {
if (UseSQL) { if (UseSQL) {
using (var xCmd = mConnection.CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "INSERT INTO FIELD_MAPPING (TYPE_NAME, FIELD_COUNT, FIELD_NAMES)" + xCmd.CommandText = "INSERT INTO FIELD_MAPPING (TYPE_NAME, FIELD_COUNT, FIELD_NAMES)" +
" VALUES (@TYPE_NAME, @FIELD_COUNT, @FIELD_NAMES)"; " VALUES (@TYPE_NAME, @FIELD_COUNT, @FIELD_NAME)";
xCmd.Prepare(); xCmd.Prepare();
// Is a real DB now, but we still store all in RAM. We don't need to. Need to change to query DB as needed instead. // Is a real DB now, but we still store all in RAM. We don't need to. Need to change to query DB as needed instead.
foreach (var xItem in xMaps) { foreach (var xItem in xMaps) {
@ -265,15 +265,15 @@ namespace Cosmos.Debug.Common {
xCmd.Parameters[2].Value = xItem.FieldNames.ToArray(); xCmd.Parameters[2].Value = xItem.FieldNames.ToArray();
xCmd.ExecuteNonQuery(); xCmd.ExecuteNonQuery();
} }
transaction.Commit();
} }
transaction.Commit();
} }
} }
} }
public Field_Map GetFieldMap(string name) { public Field_Map GetFieldMap(string name) {
Field_Map mp = new Field_Map(); var mp = new Field_Map();
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "select TYPE_NAME, FIELD_COUNT, FIELD_NAMES from FIELD_MAPPING where(TYPE_NAME='" + name + "')"; xCmd.CommandText = "select TYPE_NAME, FIELD_COUNT, FIELD_NAMES from FIELD_MAPPING where(TYPE_NAME='" + name + "')";
using (var xReader = xCmd.ExecuteReader()) { using (var xReader = xCmd.ExecuteReader()) {
if (xReader.Read()) { if (xReader.Read()) {
@ -289,7 +289,7 @@ namespace Cosmos.Debug.Common {
} }
public void ReadFieldMappingList(List<Field_Map> aSymbols) { public void ReadFieldMappingList(List<Field_Map> aSymbols) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "select TYPE_NAME, FIELD_COUNT, FIELD_NAMES from FIELD_MAPPING"; xCmd.CommandText = "select TYPE_NAME, FIELD_COUNT, FIELD_NAMES from FIELD_MAPPING";
using (var xReader = xCmd.ExecuteReader()) { using (var xReader = xCmd.ExecuteReader()) {
while (xReader.Read()) { while (xReader.Read()) {
@ -303,10 +303,8 @@ namespace Cosmos.Debug.Common {
} }
} }
protected List<string> local_FieldInfoNames = new List<string>();
private List<string> local_FieldInfoNames = new List<string>();
public void WriteFieldInfoToFile(IEnumerable<Field_Info> aFields) { public void WriteFieldInfoToFile(IEnumerable<Field_Info> aFields) {
using (FbTransaction transaction = ((FbConnection)mConnection).BeginTransaction()) {
IEnumerable<Field_Info> xFields = aFields.Where(delegate(Field_Info mp) { IEnumerable<Field_Info> xFields = aFields.Where(delegate(Field_Info mp) {
if (local_FieldInfoNames.Contains(mp.Name)) { if (local_FieldInfoNames.Contains(mp.Name)) {
return false; return false;
@ -315,6 +313,22 @@ namespace Cosmos.Debug.Common {
return true; return true;
} }
}); });
if (UseSQL) {
using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "INSERT INTO FIELD_INFO (TYPE, OFFSET, NAME)" +
" VALUES (@TYPE, @OFFSET, @NAME)";
xCmd.Prepare();
// Is a real DB now, but we still store all in RAM. We don't need to. Need to change to query DB as needed instead.
foreach (var xItem in xFields) {
xCmd.Parameters[0].Value = xItem.Type;
xCmd.Parameters[1].Value = xItem.Offset;
xCmd.Parameters[2].Value = xItem.Name;
xCmd.ExecuteNonQuery();
}
}
} else {
using (FbTransaction transaction = ((FbConnection)mConnection).BeginTransaction()) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = ((FbConnection)mConnection).CreateCommand()) {
xCmd.Transaction = transaction; xCmd.Transaction = transaction;
xCmd.CommandText = "INSERT INTO FIELD_INFO (TYPE, OFFSET, NAME)" + xCmd.CommandText = "INSERT INTO FIELD_INFO (TYPE, OFFSET, NAME)" +
@ -333,14 +347,14 @@ namespace Cosmos.Debug.Common {
xCmd.ExecuteNonQuery(); xCmd.ExecuteNonQuery();
} }
} }
transaction.Commit(); transaction.Commit();
} }
} }
}
public Field_Info GetFieldInfo(string name) { public Field_Info GetFieldInfo(string name) {
Field_Info inf = new Field_Info(); var inf = new Field_Info();
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "select TYPE, OFFSET, NAME from FIELD_INFO where NAME='" + name + "'"; xCmd.CommandText = "select TYPE, OFFSET, NAME from FIELD_INFO where NAME='" + name + "'";
using (var xReader = xCmd.ExecuteReader()) { using (var xReader = xCmd.ExecuteReader()) {
xReader.Read(); xReader.Read();
@ -353,7 +367,7 @@ namespace Cosmos.Debug.Common {
} }
public void ReadFieldInfoList(List<Field_Info> aSymbols) { public void ReadFieldInfoList(List<Field_Info> aSymbols) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "select TYPE, OFFSET, NAME from FIELD_INFO"; xCmd.CommandText = "select TYPE, OFFSET, NAME from FIELD_INFO";
using (var xReader = xCmd.ExecuteReader()) { using (var xReader = xCmd.ExecuteReader()) {
while (xReader.Read()) { while (xReader.Read()) {
@ -367,8 +381,25 @@ namespace Cosmos.Debug.Common {
} }
} }
public void WriteSymbolsListToFile(IEnumerable<MLDebugSymbol> aSymbols) { public void WriteSymbolsListToFile(IEnumerable<MLDebugSymbol> aSymbols) {
if (UseSQL) {
using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "INSERT INTO MLSYMBOL (LABELNAME, STACKDIFF, ILASMFILE, TYPETOKEN, METHODTOKEN, ILOFFSET, METHODNAME)" +
" VALUES (@LABELNAME, @STACKDIFF, @ILASMFILE, @TYPETOKEN, @METHODTOKEN, @ILOFFSET, @METHODNAME)";
xCmd.Prepare();
// Is a real DB now, but we still store all in RAM. We dont need to. Need to change to query DB as needed instead.
foreach (var xItem in aSymbols) {
xCmd.Parameters[0].Value = xItem.LabelName;
xCmd.Parameters[1].Value = xItem.StackDifference;
xCmd.Parameters[2].Value = xItem.AssemblyFile;
xCmd.Parameters[3].Value = xItem.TypeToken;
xCmd.Parameters[4].Value = xItem.MethodToken;
xCmd.Parameters[5].Value = xItem.ILOffset;
xCmd.Parameters[6].Value = xItem.MethodName;
xCmd.ExecuteNonQuery();
}
}
} else {
using (FbTransaction transaction = ((FbConnection)mConnection).BeginTransaction()) { using (FbTransaction transaction = ((FbConnection)mConnection).BeginTransaction()) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = ((FbConnection)mConnection).CreateCommand()) {
xCmd.Transaction = transaction; xCmd.Transaction = transaction;
@ -400,9 +431,10 @@ namespace Cosmos.Debug.Common {
transaction.Commit(); transaction.Commit();
} }
} }
}
public void ReadSymbolsList(List<MLDebugSymbol> aSymbols) { public void ReadSymbolsList(List<MLDebugSymbol> aSymbols) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "select LABELNAME, STACKDIFF, ILASMFILE, TYPETOKEN, METHODTOKEN, ILOFFSET, METHODNAME from MLSYMBOL"; xCmd.CommandText = "select LABELNAME, STACKDIFF, ILASMFILE, TYPETOKEN, METHODTOKEN, ILOFFSET, METHODNAME from MLSYMBOL";
using (var xReader = xCmd.ExecuteReader()) { using (var xReader = xCmd.ExecuteReader()) {
while (xReader.Read()) { while (xReader.Read()) {
@ -421,10 +453,9 @@ namespace Cosmos.Debug.Common {
} }
public MLDebugSymbol ReadSymbolByLabelName(string labelName) { public MLDebugSymbol ReadSymbolByLabelName(string labelName) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "select LABELNAME, STACKDIFF, ILASMFILE, TYPETOKEN, METHODTOKEN, ILOFFSET, METHODNAME from MLSYMBOL" xCmd.CommandText = "select LABELNAME, STACKDIFF, ILASMFILE, TYPETOKEN, METHODTOKEN, ILOFFSET, METHODNAME from MLSYMBOL"
+ " WHERE LABELNAME = @LABELNAME"; + " WHERE LABELNAME = '" + labelName + "'";
xCmd.Parameters.Add("@LABELNAME", labelName);
using (var xReader = xCmd.ExecuteReader()) { using (var xReader = xCmd.ExecuteReader()) {
if (xReader.Read()) { if (xReader.Read()) {
return new MLDebugSymbol { return new MLDebugSymbol {
@ -445,6 +476,21 @@ namespace Cosmos.Debug.Common {
// tuple format: MethodLabel, IsArgument, Index, Offset // tuple format: MethodLabel, IsArgument, Index, Offset
public void WriteAllLocalsArgumentsInfos(IEnumerable<Local_Argument_Info> infos) { public void WriteAllLocalsArgumentsInfos(IEnumerable<Local_Argument_Info> infos) {
if (UseSQL) {
using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "insert into LOCAL_ARGUMENT_INFO (METHODLABELNAME, ISARGUMENT, INDEXINMETHOD, OFFSET, NAME, TYPENAME) values (@METHODLABELNAME, @ISARGUMENT, @INDEXINMETHOD, @OFFSET, @NAME, @TYPENAME)";
xCmd.Prepare();
foreach (var xInfo in infos) {
xCmd.Parameters[0].Value = xInfo.MethodLabelName;
xCmd.Parameters[1].Value = xInfo.IsArgument ? 1 : 0;
xCmd.Parameters[2].Value = xInfo.Index;
xCmd.Parameters[3].Value = xInfo.Offset;
xCmd.Parameters[4].Value = xInfo.Name;
xCmd.Parameters[5].Value = xInfo.Type;
xCmd.ExecuteNonQuery();
}
}
} else {
using (var xTrans = ((FbConnection)mConnection).BeginTransaction()) { using (var xTrans = ((FbConnection)mConnection).BeginTransaction()) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = ((FbConnection)mConnection).CreateCommand()) {
xCmd.Transaction = xTrans; xCmd.Transaction = xTrans;
@ -469,9 +515,10 @@ namespace Cosmos.Debug.Common {
} }
} }
} }
}
public IList<Local_Argument_Info> ReadAllLocalsArgumentsInfos() { public IList<Local_Argument_Info> ReadAllLocalsArgumentsInfos() {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "select METHODLABELNAME, ISARGUMENT, INDEXINMETHOD, OFFSET, NAME, TYPENAME from LOCAL_ARGUMENT_INFO"; xCmd.CommandText = "select METHODLABELNAME, ISARGUMENT, INDEXINMETHOD, OFFSET, NAME, TYPENAME from LOCAL_ARGUMENT_INFO";
using (var xReader = xCmd.ExecuteReader()) { using (var xReader = xCmd.ExecuteReader()) {
var xResult = new List<Local_Argument_Info>(xReader.RecordsAffected); var xResult = new List<Local_Argument_Info>(xReader.RecordsAffected);
@ -491,10 +538,9 @@ namespace Cosmos.Debug.Common {
} }
public IList<Local_Argument_Info> ReadAllLocalsArgumentsInfosByMethodLabelName(string methodLabelName) { public IList<Local_Argument_Info> ReadAllLocalsArgumentsInfosByMethodLabelName(string methodLabelName) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "select METHODLABELNAME, ISARGUMENT, INDEXINMETHOD, OFFSET, NAME, TYPENAME from LOCAL_ARGUMENT_INFO" xCmd.CommandText = "select METHODLABELNAME, ISARGUMENT, INDEXINMETHOD, OFFSET, NAME, TYPENAME from LOCAL_ARGUMENT_INFO"
+ " WHERE METHODLABELNAME = @METHODLABELNAME"; + " WHERE METHODLABELNAME = '" + methodLabelName + "'";
xCmd.Parameters.Add("@METHODLABELNAME", methodLabelName);
using (var xReader = xCmd.ExecuteReader()) { using (var xReader = xCmd.ExecuteReader()) {
var xResult = new List<Local_Argument_Info>(xReader.RecordsAffected); var xResult = new List<Local_Argument_Info>(xReader.RecordsAffected);
while (xReader.Read()) { while (xReader.Read()) {
@ -515,7 +561,7 @@ namespace Cosmos.Debug.Common {
public void ReadLabels(out List<KeyValuePair<uint, string>> oLabels, out IDictionary<string, uint> oLabelAddressMappings) { public void ReadLabels(out List<KeyValuePair<uint, string>> oLabels, out IDictionary<string, uint> oLabelAddressMappings) {
oLabels = new List<KeyValuePair<uint, string>>(); oLabels = new List<KeyValuePair<uint, string>>();
oLabelAddressMappings = new Dictionary<string, uint>(); oLabelAddressMappings = new Dictionary<string, uint>();
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "select LABELNAME, ADDRESS from Label"; xCmd.CommandText = "select LABELNAME, ADDRESS from Label";
using (var xReader = xCmd.ExecuteReader()) { using (var xReader = xCmd.ExecuteReader()) {
while (xReader.Read()) { while (xReader.Read()) {
@ -530,6 +576,17 @@ namespace Cosmos.Debug.Common {
protected int mMethodId = 0; protected int mMethodId = 0;
public int AddMethod(string aLabelPrefix) { public int AddMethod(string aLabelPrefix) {
mMethodId++; mMethodId++;
if (UseSQL) {
using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "INSERT INTO Method (MethodId, LabelPrefix) values (@MethodId, @LabelPrefix)";
xCmd.Prepare();
xCmd.Parameters[0].Value = mMethodId;
xCmd.Parameters[1].Value = aLabelPrefix;
xCmd.ExecuteNonQuery();
}
} else {
using (var xTrans = ((FbConnection)mConnection).BeginTransaction()) { using (var xTrans = ((FbConnection)mConnection).BeginTransaction()) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = ((FbConnection)mConnection).CreateCommand()) {
xCmd.Transaction = xTrans; xCmd.Transaction = xTrans;
@ -546,10 +603,23 @@ namespace Cosmos.Debug.Common {
xTrans.Commit(); xTrans.Commit();
} }
} }
}
return mMethodId; return mMethodId;
} }
public void WriteLabels(List<KeyValuePair<uint, string>> aMap) { public void WriteLabels(List<KeyValuePair<uint, string>> aMap) {
if (UseSQL) {
using (var xCmd = mConnection.CreateCommand()) {
xCmd.CommandText = "insert into Label (LABELNAME, ADDRESS) values (@LABELNAME, @ADDRESS)";
xCmd.Prepare();
foreach (var xItem in aMap) {
xCmd.Parameters[0].Value = xItem.Value;
xCmd.Parameters[1].Value = xItem.Key;
xCmd.ExecuteNonQuery();
}
}
} else {
using (var xTrans = ((FbConnection)mConnection).BeginTransaction()) { using (var xTrans = ((FbConnection)mConnection).BeginTransaction()) {
using (var xCmd = ((FbConnection)mConnection).CreateCommand()) { using (var xCmd = ((FbConnection)mConnection).CreateCommand()) {
xCmd.Transaction = xTrans; xCmd.Transaction = xTrans;
@ -566,6 +636,7 @@ namespace Cosmos.Debug.Common {
} }
} }
} }
}
public void Dispose() { public void Dispose() {
if (mConnection != null) { if (mConnection != null) {
@ -573,6 +644,7 @@ namespace Cosmos.Debug.Common {
mConnection = null; mConnection = null;
xCon.Dispose(); xCon.Dispose();
} }
// Why do we do this?
GC.SuppressFinalize(this); GC.SuppressFinalize(this);
} }
} }