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 ;
@@ -167,6 +168,45 @@ public void createQueries() {
167168 assertEquals (1 , delete2 .getRows ().size ());
168169 }
169170
171+ @ Test
172+ public void dontMergeSameTableNameOnDifferentDataMaps () {
173+ DbEntity test1Datamap1 = mockEntity ("test1" , "datamap1" );
174+ DbEntity test1Datamap2 = mockEntity ("test1" , "datamap2" );
175+ DbEntity test2Datamap1 = mockEntity ("test2" , "datamap1" );
176+ DbEntity test2Datamap2 = mockEntity ("test2" , "datamap2" );
177+ DbEntity test3Datamap1 = mockEntity ("test3" , "datamap1" );
178+ DbEntity test3Datamap2 = mockEntity ("test3" , "datamap2" );
179+
180+ ObjectId id1 = ObjectId .of ("test1" , "id" , 1 );
181+ ObjectId id2 = ObjectId .of ("test1" , "id" , 2 );
182+ ObjectId id3 = ObjectId .of ("test2" , "id" , 3 );
183+ ObjectId id4 = ObjectId .of ("test2" , "id" , 4 );
184+ ObjectId id5 = ObjectId .of ("test3" , "id" , 5 );
185+ ObjectId id6 = ObjectId .of ("test3" , "id" , 6 );
186+
187+ UpdateDbRowOp update1 = new UpdateDbRowOp (mockObject (id3 ), test2Datamap1 , id3 );
188+ update1 .getValues ().addValue (new DbAttribute ("attr" ), "abc" , false );
189+ update1 .getValues ().addValue (new DbAttribute ("attr" ), "abc" , false );
190+
191+ UpdateDbRowOp update2 = new UpdateDbRowOp (mockObject (id4 ), test2Datamap2 , id4 );
192+ update2 .getValues ().addValue (new DbAttribute ("attr" ), "def" , false );
193+ update2 .getValues ().addValue (new DbAttribute ("attr" ), "def" , false );
194+ List <DbRowOp > ops = List .of (
195+ new InsertDbRowOp (mockObject (id1 ), test1Datamap1 , id1 ),
196+ new InsertDbRowOp (mockObject (id2 ), test1Datamap2 , id2 ),
197+ update1 ,
198+ update2 ,
199+ new DeleteDbRowOp (mockObject (id5 ), test3Datamap1 , id5 ),
200+ new DeleteDbRowOp (mockObject (id6 ), test3Datamap2 , id6 )
201+ );
202+
203+ DefaultDataDomainFlushAction action = mock (DefaultDataDomainFlushAction .class );
204+ when (action .createQueries ((List <DbRowOp >) any (List .class ))).thenCallRealMethod ();
205+
206+ List <? extends Query > queries = action .createQueries (ops );
207+ assertEquals (6 , queries .size ());
208+ }
209+
170210 private Persistent mockObject (ObjectId id ) {
171211 Persistent persistent = mock (Persistent .class );
172212 when (persistent .getObjectId ()).thenReturn (id );
@@ -175,12 +215,17 @@ private Persistent mockObject(ObjectId id) {
175215 }
176216
177217 private DbEntity mockEntity (String name ) {
218+ return mockEntity (name , "defaultMap" );
219+ }
220+
221+ private DbEntity mockEntity (String name , String datamapName ) {
178222 DbAttribute attribute1 = new DbAttribute ("id" );
179223 attribute1 .setPrimaryKey (true );
180224 DbAttribute attribute2 = new DbAttribute ("attr" );
181225 DbEntity testEntity = new DbEntity (name );
182226 testEntity .addAttribute (attribute1 );
183227 testEntity .addAttribute (attribute2 );
228+ testEntity .setDataMap (new DataMap (datamapName ));
184229 return testEntity ;
185230 }
186231}
0 commit comments