@@ -64,69 +64,31 @@ public override bool IsManyToMany
64
64
/// <returns></returns>
65
65
protected override SqlCommandInfo GenerateDeleteString ( )
66
66
{
67
+ var update = new SqlUpdateBuilder ( Factory . Dialect , Factory )
68
+ . SetTableName ( qualifiedTableName )
69
+ . AddColumns ( JoinColumnNames , "null" ) ;
70
+
67
71
if ( CollectionType . UseLHSPrimaryKey )
68
72
{
69
- var update = new SqlUpdateBuilder ( Factory . Dialect , Factory )
70
- . SetTableName ( qualifiedTableName )
71
- . AddColumns ( KeyColumnNames , "null" )
72
- . SetIdentityColumn ( KeyColumnNames , KeyType ) ;
73
-
74
- if ( HasIndex )
75
- update . AddColumns ( IndexColumnNames , "null" ) ;
76
-
77
- if ( HasWhere )
78
- update . AddWhereFragment ( sqlWhereString ) ;
79
-
80
- if ( Factory . Settings . IsCommentsEnabled )
81
- update . SetComment ( "delete one-to-many " + Role ) ;
82
-
83
- return update . ToSqlCommandInfo ( ) ;
73
+ update . SetIdentityColumn ( KeyColumnNames , KeyType ) ;
84
74
}
85
75
else
86
76
{
87
- var deleteSql = new SqlStringBuilder ( ) ;
77
+ var ownerPersister = ( IOuterJoinLoadable ) OwnerEntityPersister ;
78
+ update . SetJoin ( ownerPersister . TableName , JoinColumnNames , ownerPersister . GetPropertyColumnNames ( CollectionType . LHSPropertyName ) ) ;
79
+ update . SetIdentityColumn ( ownerPersister . TableName , KeyColumnNames , KeyType ) ;
80
+ }
88
81
89
- deleteSql . Add ( "update " + qualifiedTableName + " set " ) ;
90
- bool andNeeded = false ;
91
- foreach ( string nextColumn in JoinColumnNames )
92
- {
93
- if ( andNeeded )
94
- {
95
- deleteSql . Add ( " and " ) ;
96
- }
97
- deleteSql . Add ( nextColumn + " = null" ) ;
98
- andNeeded = true ;
99
- }
82
+ if ( HasIndex )
83
+ update . AddColumns ( IndexColumnNames , "null" ) ;
100
84
101
- var ownerPersister = ( IOuterJoinLoadable ) OwnerEntityPersister ;
102
- deleteSql . Add ( " from " + qualifiedTableName + " inner join " + ownerPersister . TableName + " on " ) ;
103
- var ownerJoinColumns = ownerPersister . GetPropertyColumnNames ( CollectionType . LHSPropertyName ) ;
104
- andNeeded = false ;
105
- for ( int columnIndex = 0 ; columnIndex < JoinColumnNames . Length ; columnIndex ++ )
106
- {
107
- if ( andNeeded )
108
- {
109
- deleteSql . Add ( " and " ) ;
110
- }
111
- deleteSql . Add ( qualifiedTableName + StringHelper . Dot + JoinColumnNames [ columnIndex ] + " = " + ownerPersister . TableName + StringHelper . Dot + ownerJoinColumns [ columnIndex ] ) ;
112
- andNeeded = true ;
113
- }
85
+ if ( HasWhere )
86
+ update . AddWhereFragment ( sqlWhereString ) ;
114
87
115
- deleteSql . Add ( " where " ) ;
116
- andNeeded = false ;
117
- foreach ( string nextColumn in KeyColumnNames )
118
- {
119
- if ( andNeeded )
120
- {
121
- deleteSql . Add ( " and " ) ;
122
- }
123
- deleteSql . Add ( ownerPersister . TableName + StringHelper . Dot + nextColumn + " = " ) ;
124
- deleteSql . AddParameter ( ) ;
125
- andNeeded = true ;
126
- }
88
+ if ( Factory . Settings . IsCommentsEnabled )
89
+ update . SetComment ( "delete one-to-many " + Role ) ;
127
90
128
- return new SqlCommandInfo ( deleteSql . ToSqlString ( ) , KeyType . SqlTypes ( Factory ) ) ;
129
- }
91
+ return update . ToSqlCommandInfo ( ) ;
130
92
}
131
93
132
94
/// <summary>
@@ -198,6 +160,11 @@ public override bool ConsumesCollectionAlias()
198
160
return true ;
199
161
}
200
162
163
+ public override string GenerateTableAliasForKeyColumns ( string alias )
164
+ {
165
+ return CollectionType . UseLHSPrimaryKey ? alias : alias + "owner_" ;
166
+ }
167
+
201
168
protected override int DoUpdateRows ( object id , IPersistentCollection collection , ISessionImplementor session )
202
169
{
203
170
// we finish all the "removes" first to take care of possible unique
@@ -368,7 +335,7 @@ protected override SelectFragment GenerateSelectFragment(string alias, string co
368
335
for ( int i = 0 ; i < columnNames . Length ; i ++ )
369
336
{
370
337
var column = columnNames [ i ] ;
371
- var tableAlias = ojl . GenerateTableAliasForColumn ( alias + ( CollectionType . UseLHSPrimaryKey ? String . Empty : "owner_" ) , column ) ;
338
+ var tableAlias = CollectionType . UseLHSPrimaryKey ? ojl . GenerateTableAliasForColumn ( alias , column ) : GenerateTableAliasForKeyColumns ( alias ) ;
372
339
selectFragment . AddColumn ( tableAlias , column , columnAliases [ i ] ) ;
373
340
}
374
341
return selectFragment ;
@@ -402,7 +369,7 @@ public override SqlString FromJoinFragment(string alias, bool innerJoin, bool in
402
369
}
403
370
404
371
var ownerPersister = ( IOuterJoinLoadable ) OwnerEntityPersister ;
405
- join . AddJoin ( ownerPersister . TableName , alias + "owner_" , lhsKeyColumnNames , ownerPersister . GetPropertyColumnNames ( CollectionType . LHSPropertyName ) , JoinType . LeftOuterJoin ) ;
372
+ join . AddJoin ( ownerPersister . TableName , GenerateTableAliasForKeyColumns ( alias ) , lhsKeyColumnNames , ownerPersister . GetPropertyColumnNames ( CollectionType . LHSPropertyName ) , innerJoin ? JoinType . InnerJoin : JoinType . LeftOuterJoin ) ;
406
373
return join . ToFromFragmentString + elementJoinFragment ;
407
374
}
408
375
0 commit comments