1717package org .labkey .flow .persist ;
1818
1919import jakarta .servlet .http .HttpServletResponse ;
20- import org .apache .commons .collections4 .iterators .ArrayIterator ;
2120import org .apache .commons .lang3 .StringUtils ;
2221import org .apache .logging .log4j .LogManager ;
2322import org .apache .logging .log4j .Logger ;
4443import org .labkey .api .data .Table ;
4544import org .labkey .api .data .TableInfo ;
4645import org .labkey .api .data .TableSelector ;
46+ import org .labkey .api .data .dialect .SqlDialect ;
4747import org .labkey .api .dataiterator .DataIteratorContext ;
4848import org .labkey .api .dataiterator .MapDataIterator ;
4949import org .labkey .api .exp .Handler ;
9696import java .util .Collections ;
9797import java .util .Date ;
9898import java .util .HashMap ;
99- import java .util .HashSet ;
100- import java .util .Iterator ;
10199import java .util .LinkedHashMap ;
102100import java .util .List ;
103101import java .util .Map ;
@@ -953,14 +951,8 @@ public List<AttrObject> getAttrObjects(Collection<ExpData> datas)
953951 {
954952 if (datas .isEmpty ())
955953 return Collections .emptyList ();
956- SQLFragment sql = new SQLFragment ("SELECT * FROM " + getTinfoObject ().toString () + " WHERE DataId IN (" );
957- String comma = "" ;
958- for (ExpData data : datas )
959- {
960- sql .append (comma ).appendValue (data .getRowId ());
961- comma = "," ;
962- }
963- sql .append (")" );
954+ SQLFragment sql = new SQLFragment ("SELECT * FROM " + getTinfoObject ().toString () + " WHERE DataId" );
955+ sql .appendInClause (datas .stream ().map (ExpData ::getRowId ).toList (), getSchema ().getSqlDialect ());
964956 AttrObject [] array = new SqlSelector (getSchema (), sql ).getArray (AttrObject .class );
965957 return Arrays .asList (array );
966958 }
@@ -1023,31 +1015,27 @@ public AttrObject createAttrObject(@NotNull ExpData data, ObjectType type, URI u
10231015
10241016 int MAX_BATCH = 1000 ;
10251017
1026- private String join (Integer [] oids , int from , int to )
1027- {
1028- Iterator <Integer > i = new ArrayIterator <>(oids , from , to );
1029- return StringUtils .join (i , ',' );
1030- }
1031-
10321018 private void deleteAttributes (Integer [] oids )
10331019 {
10341020 if (oids .length == 0 )
10351021 return ;
10361022
10371023 SqlExecutor executor = new SqlExecutor (getSchema ());
1024+ SqlDialect dialect = getSchema ().getSqlDialect ();
10381025
10391026 for (int from = 0 , to ; from < oids .length ; from = to )
10401027 {
10411028 to = from + MAX_BATCH ;
10421029 if (to > oids .length )
10431030 to = oids .length ;
10441031
1045- String list = join (oids , from , to );
1046- // XXX: delete no longer referenced statattr afterwards?
1047- executor .execute ("DELETE FROM flow.Statistic WHERE ObjectId IN (" + list + ")" );
1048- executor .execute ("DELETE FROM flow.Keyword WHERE ObjectId IN (" + list + ")" );
1049- executor .execute ("DELETE FROM flow.Graph WHERE ObjectId IN (" + list + ")" );
1050- executor .execute ("DELETE FROM flow.Script WHERE ObjectId IN (" + list + ")" );
1032+ List <Integer > list = Arrays .asList (oids ).subList (from , to );
1033+ var inList = new SQLFragment ().appendInClause (list , dialect );
1034+ // XXX: delete no longer referenced statattr afterward?
1035+ executor .execute (new SQLFragment ("DELETE FROM flow.Statistic WHERE ObjectId" ).append (inList ));
1036+ executor .execute (new SQLFragment ("DELETE FROM flow.Keyword WHERE ObjectId" ).append (inList ));
1037+ executor .execute (new SQLFragment ("DELETE FROM flow.Graph WHERE ObjectId" ).append (inList ));
1038+ executor .execute (new SQLFragment ("DELETE FROM flow.Script WHERE ObjectId" ).append (inList ));
10511039 }
10521040 }
10531041
@@ -1069,9 +1057,8 @@ private void deleteObjectIds(Integer[] oids, Set<Container> containers)
10691057 try (DbScope .Transaction transaction = scope .ensureTransaction ())
10701058 {
10711059 deleteAttributes (oids );
1072- SQLFragment sqlf = new SQLFragment ("DELETE FROM flow.Object WHERE RowId IN (" );
1073- sqlf .append (StringUtils .join (oids ,',' ));
1074- sqlf .append (")" );
1060+ SQLFragment sqlf = new SQLFragment ("DELETE FROM flow.Object WHERE RowId" );
1061+ sqlf .appendInClause (Arrays .asList (oids ), getSchema ().getSqlDialect ());
10751062 new SqlExecutor (getSchema ()).execute (sqlf );
10761063 transaction .commit ();
10771064 }
@@ -1109,17 +1096,9 @@ public void deleteData(List<ExpData> datas)
11091096 {
11101097 if (datas .isEmpty ())
11111098 return ;
1112- StringBuilder sqlGetOIDs = new StringBuilder ("SELECT flow.Object.RowId FROM flow.Object WHERE flow.Object.DataId IN (" );
1113- String comma = "" ;
1114- Set <Container > containers = new HashSet <>();
1115- for (ExpData data : datas )
1116- {
1117- sqlGetOIDs .append (comma );
1118- comma = ", " ;
1119- sqlGetOIDs .append (data .getRowId ());
1120- containers .add (data .getContainer ());
1121- }
1122- sqlGetOIDs .append (")" );
1099+ SQLFragment sqlGetOIDs = new SQLFragment ("SELECT flow.Object.RowId FROM flow.Object WHERE flow.Object.DataId" );
1100+ sqlGetOIDs .appendInClause (datas .stream ().map (ExpData ::getRowId ).toList (), getSchema ().getSqlDialect ());
1101+ Set <Container > containers = datas .stream ().map (ExpData ::getContainer ).collect (Collectors .toSet ());
11231102 Integer [] objectIds = new SqlSelector (getSchema (), sqlGetOIDs ).getArray (Integer .class );
11241103 if (objectIds .length == 0 )
11251104 return ;
0 commit comments