3232import org .apache .cayenne .access .flush .operation .DeleteDbRowOp ;
3333import org .apache .cayenne .access .flush .operation .InsertDbRowOp ;
3434import org .apache .cayenne .access .flush .operation .UpdateDbRowOp ;
35+ import org .apache .cayenne .map .DataMap ;
3536import org .apache .cayenne .map .DbAttribute ;
3637import org .apache .cayenne .map .DbEntity ;
3738import org .apache .cayenne .query .DeleteBatchQuery ;
@@ -168,6 +169,45 @@ public void createQueries() {
168169 assertEquals (1 , delete2 .getRows ().size ());
169170 }
170171
172+ @ Test
173+ public void dontMergeSameTableNameOnDifferentDataMaps () {
174+ DbEntity test1Datamap1 = mockEntity ("test1" , "datamap1" );
175+ DbEntity test1Datamap2 = mockEntity ("test1" , "datamap2" );
176+ DbEntity test2Datamap1 = mockEntity ("test2" , "datamap1" );
177+ DbEntity test2Datamap2 = mockEntity ("test2" , "datamap2" );
178+ DbEntity test3Datamap1 = mockEntity ("test3" , "datamap1" );
179+ DbEntity test3Datamap2 = mockEntity ("test3" , "datamap2" );
180+
181+ ObjectId id1 = ObjectId .of ("test1" , "id" , 1 );
182+ ObjectId id2 = ObjectId .of ("test1" , "id" , 2 );
183+ ObjectId id3 = ObjectId .of ("test2" , "id" , 3 );
184+ ObjectId id4 = ObjectId .of ("test2" , "id" , 4 );
185+ ObjectId id5 = ObjectId .of ("test3" , "id" , 5 );
186+ ObjectId id6 = ObjectId .of ("test3" , "id" , 6 );
187+
188+ UpdateDbRowOp update1 = new UpdateDbRowOp (mockObject (id3 ), test2Datamap1 , id3 );
189+ update1 .getValues ().addValue (new DbAttribute ("attr" ), "abc" , false );
190+ update1 .getValues ().addValue (new DbAttribute ("attr" ), "abc" , false );
191+
192+ UpdateDbRowOp update2 = new UpdateDbRowOp (mockObject (id4 ), test2Datamap2 , id4 );
193+ update2 .getValues ().addValue (new DbAttribute ("attr" ), "def" , false );
194+ update2 .getValues ().addValue (new DbAttribute ("attr" ), "def" , false );
195+ List <DbRowOp > ops = List .of (
196+ new InsertDbRowOp (mockObject (id1 ), test1Datamap1 , id1 ),
197+ new InsertDbRowOp (mockObject (id2 ), test1Datamap2 , id2 ),
198+ update1 ,
199+ update2 ,
200+ new DeleteDbRowOp (mockObject (id5 ), test3Datamap1 , id5 ),
201+ new DeleteDbRowOp (mockObject (id6 ), test3Datamap2 , id6 )
202+ );
203+
204+ DefaultDataDomainFlushAction action = mock (DefaultDataDomainFlushAction .class );
205+ when (action .createQueries ((List <DbRowOp >) any (List .class ))).thenCallRealMethod ();
206+
207+ List <? extends Query > queries = action .createQueries (ops );
208+ assertEquals (6 , queries .size ());
209+ }
210+
171211 private Persistent mockObject (ObjectId id ) {
172212 Persistent persistent = mock (Persistent .class );
173213 when (persistent .getObjectId ()).thenReturn (id );
@@ -176,12 +216,17 @@ private Persistent mockObject(ObjectId id) {
176216 }
177217
178218 private DbEntity mockEntity (String name ) {
219+ return mockEntity (name , "defaultMap" );
220+ }
221+
222+ private DbEntity mockEntity (String name , String datamapName ) {
179223 DbAttribute attribute1 = new DbAttribute ("id" );
180224 attribute1 .setPrimaryKey (true );
181225 DbAttribute attribute2 = new DbAttribute ("attr" );
182226 DbEntity testEntity = new DbEntity (name );
183227 testEntity .addAttribute (attribute1 );
184228 testEntity .addAttribute (attribute2 );
229+ testEntity .setDataMap (new DataMap (datamapName ));
185230 return testEntity ;
186231 }
187232}
0 commit comments