From: Richard B. <rb...@us...> - 2004-10-06 23:42:45
|
Update of /cvsroot/jcframework/dotnet In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18377 Modified Files: CClassMap.vb CConnection.vb CPersistenceBroker.vb Log Message: Changed basic SQL statements (SELECT,UPDATE,INSERT,DELETE) to only use parameters for where clauses. Should increase SQL server's ability to cache statements and thus result in improved speed. Index: CConnection.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CConnection.vb,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** CConnection.vb 28 Sep 2004 07:30:16 -0000 1.25 --- CConnection.vb 6 Oct 2004 23:42:24 -0000 1.26 *************** *** 444,453 **** SyncLock GetType(COleDBConnection) Dim x As RetrieveException If DEBUG_MODE Then Debug.WriteLine(statement.SqlString) End If ! Dim rs As New CResultset Try ! Dim m_adapter As New OleDbDataAdapter(statement.SqlString, m_connection) If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction m_adapter.Fill(rs.ResultSet, "ole") --- 444,468 ---- SyncLock GetType(COleDBConnection) Dim x As RetrieveException + Dim rs As New CResultset + Dim param As OleDbParameter + Dim dd As Date + Dim m_command As New OleDbCommand + If DEBUG_MODE Then Debug.WriteLine(statement.SqlString) End If ! ! m_command.Connection = m_connection ! m_command.CommandText = statement.SqlString ! For Each cp As CSQLParameter In statement.Parameters ! param = New OleDbParameter ! param.ParameterName = cp.Name ! param.OleDbType = CType(cp.Column.ProviderType, OleDbType) ! param.Value = cp.Value ! m_command.Parameters.Add(param) ! Next ! Try ! Dim m_adapter As New OleDbDataAdapter(m_command) If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction m_adapter.Fill(rs.ResultSet, "ole") *************** *** 895,903 **** Dim x As RetrieveException Dim rs As New CResultset If DEBUG_MODE Then System.Diagnostics.Debug.WriteLine(statement.SqlString) End If Try ! Dim m_adapter As New SqlDataAdapter(statement.SqlString, m_connection) If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction m_adapter.Fill(rs.ResultSet, "ole") --- 910,942 ---- Dim x As RetrieveException Dim rs As New CResultset + Dim param As SqlParameter + Dim dd As Date + Dim m_command As New SqlCommand + If DEBUG_MODE Then System.Diagnostics.Debug.WriteLine(statement.SqlString) End If + + m_command.Connection = m_connection + m_command.CommandText = statement.SqlString + For Each cp As CSQLParameter In statement.Parameters + param = New SqlParameter + param.ParameterName = cp.Name + param.SqlDbType = CType(cp.Column.ProviderType, SqlDbType) + If TypeOf (cp.Value) Is DateTime Then + dd = cp.Value + If dd.Ticks = 0 Then + dd = DateAdd(DateInterval.Year, 1899, dd) + Else + dd = New Date(dd.Year, dd.Month, dd.Day, dd.Hour, dd.Minute, dd.Second, 0) + End If + cp.Value = dd + End If + param.Value = cp.Value + m_command.Parameters.Add(param) + Next + Try ! Dim m_adapter As New SqlDataAdapter(m_command) If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction m_adapter.Fill(rs.ResultSet, "ole") *************** *** 1365,1373 **** Dim x As RetrieveException Dim rs As New CResultset If DEBUG_MODE Then System.Diagnostics.Debug.WriteLine(statement.SqlString) End If Try ! Dim m_adapter As New MySqlDataAdapter(statement.SqlString, m_connection) If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction m_adapter.Fill(rs.ResultSet, "ole") --- 1404,1427 ---- Dim x As RetrieveException Dim rs As New CResultset + Dim m_command As New MySqlCommand + Dim cp As CSQLParameter + Dim param As MySqlParameter + If DEBUG_MODE Then System.Diagnostics.Debug.WriteLine(statement.SqlString) End If + + m_command.Connection = m_connection + m_command.CommandText = statement.SqlString + For Each cp In statement.Parameters + param = New MySqlParameter + param.ParameterName = cp.Name + param.MySqlDbType = CType(cp.Column.ProviderType, MySqlDbType) + param.Value = cp.Value + m_command.Parameters.Add(param) + Next + Try ! Dim m_adapter As New MySqlDataAdapter(m_command) If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction m_adapter.Fill(rs.ResultSet, "ole") *************** *** 1770,1779 **** SyncLock GetType(CODBCConnection) Dim x As RetrieveException If DEBUG_MODE Then Debug.WriteLine(statement.SqlString) End If ! Dim rs As New CResultset Try ! Dim m_adapter As New OdbcDataAdapter(statement.SqlString, m_connection) If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction m_adapter.Fill(rs.ResultSet, "ole") --- 1824,1847 ---- SyncLock GetType(CODBCConnection) Dim x As RetrieveException + Dim rs As New CResultset + Dim m_command As New OdbcCommand + Dim param As OdbcParameter + If DEBUG_MODE Then Debug.WriteLine(statement.SqlString) End If ! ! m_command.Connection = m_connection ! m_command.CommandText = statement.SqlString ! For Each cp As CSQLParameter In statement.Parameters ! param = New OdbcParameter ! param.ParameterName = cp.Name ! param.OdbcType = CType(cp.Column.ProviderType, System.Data.odbc.OdbcType) ! param.Value = cp.Value ! m_command.Parameters.Add(param) ! Next ! Try ! Dim m_adapter As New OdbcDataAdapter(m_command) If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction m_adapter.Fill(rs.ResultSet, "ole") Index: CPersistenceBroker.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CPersistenceBroker.vb,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** CPersistenceBroker.vb 6 Oct 2004 07:44:28 -0000 1.59 --- CPersistenceBroker.vb 6 Oct 2004 23:42:24 -0000 1.60 *************** *** 298,302 **** obj.IsLoading = True ! Dim al As New ArrayList cm2 = cm Do --- 298,331 ---- obj.IsLoading = True ! 'Dim al As New ArrayList ! 'cm2 = cm ! 'Do ! ' If useFind Then ! ' For i = 1 To cm2.getFindSize ! ' am = cm2.FindAttributeMaps(i) ! ' al.Add(cm2.RelationalDatabase.getValueFor(obj.getValueByAttribute(am.Name))) ! ' Next i ! ' cm2 = cm2.SuperClass ! ' Else ! ' For i = 1 To cm2.getKeySize ! ' am = cm2.getKeyAttributeMap(i) ! ' al.Add(cm2.RelationalDatabase.getValueFor(obj.getValueByAttribute(am.Name))) ! ' Next i ! ' cm2 = Nothing ! ' End If ! 'Loop While Not cm2 Is Nothing ! 'Dim statement As CSqlStatement ! 'If useFind Then ! ' statement = cm.getSQLFind(Me, al) ! 'Else ! ' statement = cm.getSQLRetrieve(Me, al) ! 'End If ! ! Dim statement As CSqlStatement ! If useFind Then ! statement = cm.getSQLFind(Me, Nothing) ! Else ! statement = cm.getSQLRetrieve(Me, Nothing) ! End If cm2 = cm Do *************** *** 304,308 **** For i = 1 To cm2.getFindSize am = cm2.FindAttributeMaps(i) ! al.Add(cm2.RelationalDatabase.getValueFor(obj.getValueByAttribute(am.Name))) Next i cm2 = cm2.SuperClass --- 333,337 ---- For i = 1 To cm2.getFindSize am = cm2.FindAttributeMaps(i) ! statement.addSqlParameter(i, obj.getValueByAttribute(am.Name), am.ColumnMap) Next i cm2 = cm2.SuperClass *************** *** 310,324 **** For i = 1 To cm2.getKeySize am = cm2.getKeyAttributeMap(i) ! al.Add(cm2.RelationalDatabase.getValueFor(obj.getValueByAttribute(am.Name))) Next i cm2 = Nothing End If Loop While Not cm2 Is Nothing - Dim statement As CSqlStatement - If useFind Then - statement = cm.getSQLFind(Me, al) - Else - statement = cm.getSQLRetrieve(Me, al) - End If joins = cm.Joins --- 339,347 ---- For i = 1 To cm2.getKeySize am = cm2.getKeyAttributeMap(i) ! statement.addSqlParameter(i, obj.getValueByAttribute(am.Name), am.ColumnMap) Next i cm2 = Nothing End If Loop While Not cm2 Is Nothing joins = cm.Joins *************** *** 749,781 **** Debug.WriteLine("Saving object " & cm.Name) - 'No need to do anything with shared class tables here. Other code handles it - ' - 'Dim sharedClass As Boolean - 'sharedClass = True - 'Do - ' If sharedClass Then SharedClassMapStack.Push(cm) - ' If cm.SharedTableField Is Nothing Then - ' sharedClass = False - ' Else - ' sharedClass = True - ' End If - ' cm = cm.SuperClass - 'Loop While Not cm Is Nothing - 'Do While SharedClassMapStack.Count > 0 - ' cm = SharedClassMapStack.Pop - ' If obj.Persistent Then - ' statement = cm.getUpdateSqlFor(obj) - ' conn.processStatement(statement) - ' Else - ' statement = cm.getInsertSqlFor(obj) - ' conn.processStatement(statement) - ' If cm.getIdentitySize > 0 Then - ' If CInt(cm.RelationalDatabase.getValueFor(obj.getValueByAttribute(cm.getIdentityAttributeMap(1).Name))) = 0 Then - ' obj.setAttributeValue(cm.getIdentityAttributeMap(1).Name, cm.RelationalDatabase.getIdentityValue(conn)) - ' End If - ' End If - ' End If - 'Loop - If obj.Persistent Then statement = cm.getUpdateSqlFor(obj) --- 772,775 ---- *************** *** 791,795 **** End If - 'Need to reset the modified date to the new modified date after saving. 'If we don't do this the object won't get saved correctly on subsequent calls. --- 785,788 ---- Index: CClassMap.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CClassMap.vb,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** CClassMap.vb 6 Oct 2004 07:44:25 -0000 1.30 --- CClassMap.vb 6 Oct 2004 23:42:23 -0000 1.31 *************** *** 767,774 **** map = Me.getKeyAttributeMap(i) If i = 1 Then ! m_deleteStatement.addSqlClause(map.ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(obj.getValueByAttribute(map.Name)))) Else ! m_deleteStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & map.ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(obj.getValueByAttribute(map.Name)))) End If Next i End If --- 767,777 ---- map = Me.getKeyAttributeMap(i) If i = 1 Then ! 'm_deleteStatement.addSqlClause(map.ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(obj.getValueByAttribute(map.Name)))) ! m_deleteStatement.addSqlClause(map.ColumnMap.getFullyQualifiedName & "=" & m_relationalDatabase.getParamHolder(i)) Else ! 'm_deleteStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & map.ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(obj.getValueByAttribute(map.Name)))) ! m_deleteStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & map.ColumnMap.getFullyQualifiedName & "=" & m_relationalDatabase.getParamHolder(i)) End If + m_deleteStatement.addSqlParameter(i, obj.getValueByAttribute(map.Name), map.ColumnMap) Next i End If *************** *** 1090,1094 **** ' ' Identity columns with null values should not be included in the insert statement. ! ' The database will populate the column. ' --- 1093,1097 ---- ' ' Identity columns with null values should not be included in the insert statement. ! ' The database will populate them during the insert. ' *************** *** 1101,1104 **** --- 1104,1108 ---- Dim AttrMap As CAttributeMap Dim i As Short + Dim paramCount As Short ' *************** *** 1205,1209 **** End If Dim AttrMap As CAttributeMap ! Dim i As Short Dim isFirst As Boolean --- 1209,1213 ---- End If Dim AttrMap As CAttributeMap ! Dim i As Short, paramCount As Short Dim isFirst As Boolean *************** *** 1246,1249 **** --- 1250,1254 ---- End If Next i + paramCount = Me.getSize 'Add WHERE clause m_updateStatement.addSqlClause(" " & RelationalDatabase.getClauseStringWhere & " ") *************** *** 1258,1267 **** For i = 1 To Me.getKeySize AttrMap = Me.getKeyAttributeMap(i) ! keyValuesCol.Add(m_relationalDatabase.getValueFor(obj.OriginalCacheKey.GetKeyValue(i))) Next Else For i = 1 To Me.getKeySize AttrMap = Me.getKeyAttributeMap(i) ! keyValuesCol.Add(m_relationalDatabase.getValueFor(obj.getValueByAttribute(AttrMap.Name))) Next End If --- 1263,1274 ---- For i = 1 To Me.getKeySize AttrMap = Me.getKeyAttributeMap(i) ! 'keyValuesCol.Add(m_relationalDatabase.getValueFor(obj.OriginalCacheKey.GetKeyValue(i))) ! keyValuesCol.Add(obj.OriginalCacheKey.GetKeyValue(i)) Next Else For i = 1 To Me.getKeySize AttrMap = Me.getKeyAttributeMap(i) ! 'keyValuesCol.Add(m_relationalDatabase.getValueFor(obj.getValueByAttribute(AttrMap.Name))) ! keyValuesCol.Add(obj.getValueByAttribute(AttrMap.Name)) Next End If *************** *** 1269,1278 **** For i = 1 To Me.getKeySize AttrMap = Me.getKeyAttributeMap(i) If Not isFirst Then ! m_updateStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & AttrMap.ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(keyValuesCol.Item(i)))) Else ! m_updateStatement.addSqlClause("" & AttrMap.ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(keyValuesCol.Item(i)))) isFirst = False End If Next i If Not Me.SharedTableField Is Nothing Then --- 1276,1289 ---- For i = 1 To Me.getKeySize AttrMap = Me.getKeyAttributeMap(i) + paramCount += 1 If Not isFirst Then ! 'm_updateStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & AttrMap.ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(keyValuesCol.Item(i)))) ! m_updateStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & AttrMap.ColumnMap.getFullyQualifiedName & "=" & m_relationalDatabase.getParamHolder(paramCount)) Else ! 'm_updateStatement.addSqlClause("" & AttrMap.ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(keyValuesCol.Item(i)))) ! m_updateStatement.addSqlClause("" & AttrMap.ColumnMap.getFullyQualifiedName & "=" & m_relationalDatabase.getParamHolder(paramCount)) isFirst = False End If + m_updateStatement.addSqlParameter(paramCount, keyValuesCol.Item(i), AttrMap.ColumnMap) Next i If Not Me.SharedTableField Is Nothing Then *************** *** 1287,1291 **** 'process timestamp attributes If Me.getAttributeMap(i).isTimeStamp Then ! m_updateStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & Me.getAttributeMap(i).ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(obj.getValueByAttribute("Original" & Me.getAttributeMap(i).Name)))) End If Next i --- 1298,1305 ---- 'process timestamp attributes If Me.getAttributeMap(i).isTimeStamp Then ! paramCount += 1 ! 'm_updateStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & Me.getAttributeMap(i).ColumnMap.getFullyQualifiedName & m_relationalDatabase.getClauseStringEqualTo(m_relationalDatabase.getValueFor(obj.getValueByAttribute("Original" & Me.getAttributeMap(i).Name)))) ! m_updateStatement.addSqlClause(" " & RelationalDatabase.getClauseStringAnd & " " & Me.getAttributeMap(i).ColumnMap.getFullyQualifiedName & "=" & m_relationalDatabase.getParamHolder(paramCount)) ! m_updateStatement.addSqlParameter(paramCount, obj.getValueByAttribute("Original" & Me.getAttributeMap(i).Name), Me.getAttributeMap(i).ColumnMap) End If Next i *************** *** 1717,1731 **** Dim i As Integer = 1 If m_sqlRetrieveStub.Length > 0 Then ! Dim x As String = m_sqlRetrieveStub ! For Each s As String In args ! If s = "NULL" Then ! x = x.Replace(" = _" & i.ToString & "_", " is NULL") ! Else ! x = x.Replace("_" & i.ToString & "_", s) ! End If ! i += 1 ! Next ! statement.SqlString = x Return statement End If --- 1731,1747 ---- Dim i As Integer = 1 If m_sqlRetrieveStub.Length > 0 Then ! statement.SqlString = m_sqlRetrieveStub Return statement + 'Dim x As String = m_sqlRetrieveStub + 'For Each s As String In args + ' If s = "NULL" Then + ' x = x.Replace(" = _" & i.ToString & "_", " is NULL") + ' Else + ' x = x.Replace("_" & i.ToString & "_", s) + ' End If + ' i += 1 + 'Next + 'statement.SqlString = x + 'Return statement End If *************** *** 1814,1819 **** isfirst = False End If statement.addSqlClause(" " & am.ColumnMap.getAliasQualifiedName(mapName) _ ! & cm2.RelationalDatabase.getClauseStringEqualTo("_" & i.ToString & "_")) Next i cm2 = Nothing --- 1830,1837 ---- isfirst = False End If + 'statement.addSqlClause(" " & am.ColumnMap.getAliasQualifiedName(mapName) _ + ' & cm2.RelationalDatabase.getClauseStringEqualTo("_" & i.ToString & "_")) statement.addSqlClause(" " & am.ColumnMap.getAliasQualifiedName(mapName) _ ! & " = " & cm2.RelationalDatabase.getParamHolder(i)) Next i cm2 = Nothing *************** *** 1830,1844 **** Dim i As Integer = 1 If m_sqlFindStub.Length > 0 Then ! Dim x As String = m_sqlFindStub ! For Each s As String In args ! If s = "NULL" Then ! x = x.Replace(" = _" & i.ToString & "_", " is NULL") ! Else ! x = x.Replace("_" & i.ToString & "_", s) ! End If ! i += 1 ! Next ! statement.SqlString = x Return statement End If --- 1848,1864 ---- Dim i As Integer = 1 If m_sqlFindStub.Length > 0 Then ! statement.SqlString = m_sqlFindStub Return statement + 'Dim x As String = m_sqlFindStub + 'For Each s As String In args + ' If s = "NULL" Then + ' x = x.Replace(" = _" & i.ToString & "_", " is NULL") + ' Else + ' x = x.Replace("_" & i.ToString & "_", s) + ' End If + ' i += 1 + 'Next + 'statement.SqlString = x + 'Return statement End If *************** *** 1929,1934 **** isfirst = False End If statement.addSqlClause(" " & am.ColumnMap.getAliasQualifiedName(mapName) _ ! & cm2.RelationalDatabase.getClauseStringEqualTo("_" & i.ToString & "_")) Next i cm2 = Nothing --- 1949,1956 ---- isfirst = False End If + 'statement.addSqlClause(" " & am.ColumnMap.getAliasQualifiedName(mapName) _ + ' & cm2.RelationalDatabase.getClauseStringEqualTo("_" & i.ToString & "_")) statement.addSqlClause(" " & am.ColumnMap.getAliasQualifiedName(mapName) _ ! & " = " & cm2.RelationalDatabase.getParamHolder(i)) Next i cm2 = Nothing |