MediaFinder: keresés módosítása
authorSweidan Omar <TFS\sweidan.omar>
Tue, 23 Nov 2021 12:39:41 +0000 (12:39 +0000)
committerSweidan Omar <TFS\sweidan.omar>
Tue, 23 Nov 2021 12:39:41 +0000 (12:39 +0000)
git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C32354

server/user.jobengine.osgi.db/src/user/jobengine/search/MediaFinder.java

index 95db16d8917aad4c9527e224a63aa8abb2ab4f1b..a25385ecdf60cf718774138a03b5dfc9bf91f8c2 100644 (file)
@@ -33,6 +33,10 @@ public class MediaFinder implements IMediaFinder {
 \r
                StringBuilder sql = new StringBuilder();\r
                sql.append("SELECT ");\r
+               \r
+               if(options.isCountOnly() == true) {\r
+                       sql.append(" COUNT(");\r
+               }\r
                sql.append("i.id itemid,");\r
                sql.append("i.title itemtitle,");\r
                sql.append("m.id mediaid,");\r
@@ -49,6 +53,10 @@ public class MediaFinder implements IMediaFinder {
                sql.append("m.houseid mediahouseid,");\r
                sql.append("mf.houseid mediafilehouseid,");\r
                sql.append("vw_mf.mediafilecount");\r
+               if(options.isCountOnly() == true) {\r
+                       sql.append(") AS NumberOfRecords");\r
+               }               \r
+\r
                sql.append(" FROM ITEM i, MEDIA m, MEDIAFILE mf, MEDIADESCRIPTION md, VW_MEDIAFILES vw_mf, ITEMTYPE it");\r
                sql.append(" WHERE i.id = md.itemid AND m.id = md.mediaid AND mf.id = md.mediafileid");\r
                sql.append(" AND m.id=vw_mf.mediaid AND m.itemTypeId = it.id");\r
@@ -83,13 +91,6 @@ public class MediaFinder implements IMediaFinder {
                                sql.append(" AND CONTAINS(md.description, '" + criteria + "') >= 1");\r
                }\r
 \r
-               /*\r
-               if (options.getFrom() != null)\r
-                       sql.append(String.format(" AND m.archived > '%s'", df.format(options.getFrom())));\r
-               \r
-               if (options.getTo() != null)\r
-                       sql.append(String.format(" AND m.archived < '%s'", df.format(options.getTo())));\r
-                */\r
                if (options.getFrom() != null)\r
                        sql.append(String.format(" AND m.creation > '%s'", df.format(options.getFrom())));\r
 \r
@@ -115,7 +116,7 @@ public class MediaFinder implements IMediaFinder {
                PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,\r
                                ResultSet.CONCUR_UPDATABLE);\r
 \r
-               //      Ettol elszall a 11.5-on a kereses\r
+               //      TODO Ettol elszall a 11.5-on a kereses\r
                //              if (criteria != null && criteria.trim().length() > 0) {\r
                //                      st.setString(1, criteria);\r
                //                      logger.info("Parameter is {}", criteria);\r
@@ -156,37 +157,26 @@ public class MediaFinder implements IMediaFinder {
                PreparedStatement st = null;\r
                DefaultContext context = manager.getDbContext();\r
                Connection connection = context.getConnection();\r
+               SearchOptions optionsForCounting= options;\r
+               optionsForCounting.setCountOnly(true);\r
+               \r
                try {\r
                        int maxRecords = options.getToResult() - options.getFromResult();\r
 \r
+                       //creating a query for checking resultset size\r
+                       st= createStatement(connection, optionsForCounting.getText(), optionsForCounting);\r
+                       st.close();\r
+                       rs= st.executeQuery();\r
+                       rs.close();\r
+                       logger.info("Checking size");\r
+                       result.setItemCount(rs.getInt("NumberOfRecords"));\r
+                       \r
                        st = createStatement(connection, options.getText(), options);\r
-\r
-                       logger.info("Executing query, fetch size is {}, automcommit {}", st.getFetchSize(),\r
+                       logger.info("Executing query, fetch size is {}, autocommit {}", st.getFetchSize(),\r
                                        connection.getAutoCommit());\r
                        rs = st.executeQuery();\r
-                       logger.info("Checking size");\r
-                       rs.last();\r
-                       result.setItemCount(rs.getRow());\r
                        logger.info("Result size is {}", result.getItemCount());\r
 \r
-                       // set begining position\r
-                       if (options.getFromResult() > -1) {\r
-                               if (options.getFromResult() <= result.getItemCount()) {\r
-                                       if (options.getFromResult() > 1) {\r
-                                               rs.absolute(options.getFromResult() - 1);\r
-                                       } else {\r
-                                               rs.beforeFirst();\r
-                                       }\r
-                               } else {\r
-                                       if (result.getItemCount() > 0) {\r
-                                               throw new Exception("Invalid searchResult 'from' position: " + options.getFromResult()\r
-                                                               + " total records: " + result.getItemCount());\r
-                                       }\r
-                               }\r
-                       } else {\r
-                               rs.beforeFirst();\r
-                       }\r
-\r
                        List<ArchivedMedia> resultList = null;\r
                        logger.info("Processing query result, maxRecords {}", maxRecords);\r
                        while (rs.next() && maxRecords > 0) {\r
@@ -222,7 +212,6 @@ public class MediaFinder implements IMediaFinder {
                                resultList.add(am);\r
 \r
                                am.setRelevant(rs.getString("description"));\r
-                               // setRelevant(criterias, am, rs.getString("description"));\r
                                maxRecords--;\r
                        }\r
                        logger.info("Query result processed");\r
@@ -237,7 +226,6 @@ public class MediaFinder implements IMediaFinder {
                        manager.throwError(e);\r
                } finally {\r
                        try {\r
-\r
                                if (rs != null)\r
                                        rs.close();\r
                        } catch (Exception e1) {\r
@@ -275,7 +263,7 @@ public class MediaFinder implements IMediaFinder {
                        result.setItemCount(rs.getRow());\r
                        logger.info("Result size is {}", result.getItemCount());\r
 \r
-                       // set begining position\r
+                       // set beginning position\r
                        if (options.getFromResult() > -1) {\r
                                if (options.getFromResult() <= result.getItemCount()) {\r
                                        if (options.getFromResult() > 1) {\r