Index: topia/src/java/org/codelutin/topia/persistence/TopiaTransaction.java diff -u topia/src/java/org/codelutin/topia/persistence/TopiaTransaction.java:1.3 topia/src/java/org/codelutin/topia/persistence/TopiaTransaction.java:1.4 --- topia/src/java/org/codelutin/topia/persistence/TopiaTransaction.java:1.3 Thu Aug 4 20:59:31 2005 +++ topia/src/java/org/codelutin/topia/persistence/TopiaTransaction.java Fri Aug 5 17:04:40 2005 @@ -23,10 +23,10 @@ * Created: 16 juillet 2005 22:54:16 CEST * * @author Benjamin POUSSIN - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ * - * Last update: $Date: 2005/08/04 20:59:31 $ - * by : $Author: bpoussin $ + * Last update: $Date: 2005/08/05 17:04:40 $ + * by : $Author: thimel $ */ package org.codelutin.topia.persistence; @@ -90,6 +90,15 @@ result[i++] = tt.getId(); } return result; + } + + public String getIdsToString(){ + String output = ""; + long[] ids = getIds(); + for (int i = 0; i < ids.length; i++) { + output += ids[i] + ", "; + } + return output.substring(0, output.length() - 2); } /** Index: topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java diff -u topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java:1.12 topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java:1.13 --- topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java:1.12 Thu Aug 4 20:59:31 2005 +++ topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java Fri Aug 5 17:04:40 2005 @@ -23,10 +23,10 @@ * Created: 20 juillet 2005 15:25:06 CEST * * @author Benjamin POUSSIN - * @version $Revision: 1.12 $ + * @version $Revision: 1.13 $ * - * Last update: $Date: 2005/08/04 20:59:31 $ - * by : $Author: bpoussin $ + * Last update: $Date: 2005/08/05 17:04:40 $ + * by : $Author: thimel $ */ package org.codelutin.topia.persistence; @@ -159,11 +159,11 @@ "CREATE INDEX index_data_longdate ON data (longdate)"); // on tri sur la valeur abasolue puis sur la valeur reel, pour que les transactions arrive en premier dans les resultats SQL_DEFAULT.put(SQL_LOAD_HISTORY, - "SELECT * FROM management WHERE id=? AND ((longdate > 0 and longdate<=?) or longdate in (?)) order by abs(longdate) desc, longdate"); + "SELECT * FROM management WHERE id=? AND ((longdate > 0 AND longdate<=?) OR longdate in (" + Util.SQL_IDS_KEY + ")) order by abs(longdate) desc, longdate"); SQL_DEFAULT.put(SQL_REMOVE_DATA, "DELETE data WHERE id=? and longdate=?"); SQL_DEFAULT.put(SQL_GET_ALL_ID, - "SELECT DISTINCT(id) FROM management WHERE (longdate in (?) OR (longdate>0 AND longdate<=?)) AND id NOT IN (SELECT id FROM management WHERE (longdate in (?) OR (longdate>0 AND longdate<=?)) AND isDeleted=true)"); + "SELECT DISTINCT(id) FROM management WHERE (longdate in (" + Util.SQL_IDS_KEY + ") OR (longdate>0 AND longdate<=?)) AND id NOT IN (SELECT id FROM management WHERE isDeleted=true AND (longdate in (" + Util.SQL_IDS_KEY + ") OR (longdate>0 AND longdate<=?)))"); SQL_DEFAULT.put(SQL_INSERT_DATA, "INSERT INTO data VALUES (?, ?, ?, ?, ?)"); @@ -739,12 +739,12 @@ try{ Connection conn = getConnection(); try{ - PreparedStatement sta = conn.prepareStatement(SQL.getProperty(SQL_GET_ALL_ID)); + String query = SQL.getProperty(SQL_GET_ALL_ID); + query = Util.setAllMultipleIds(query, context.getTransaction()); + PreparedStatement sta = conn.prepareStatement(query); try{ - sta.setObject(1, context.getTransaction().getIds(), Types.ARRAY); + sta.setLong(1, -context.getTransaction().getId()); sta.setLong(2, -context.getTransaction().getId()); - sta.setObject(3, context.getTransaction().getIds(), Types.ARRAY); - sta.setLong(4, -context.getTransaction().getId()); ResultSet rr = sta.executeQuery(); while(rr.next()){ result.add(rr.getString("id")); @@ -873,6 +873,7 @@ * leve l'exception UnsupportedOperationException */ public List find(TopiaContext context, TopiaQuery query) throws TopiaPersistenceException { + long time = System.currentTimeMillis(); //TODO Pour les tests de perfs, a supprimer TopiaJDBCQueryHelper queryHelper = new TopiaJDBCQueryHelper(); try { queryHelper.setQuery(query.getQueryString()); @@ -911,6 +912,8 @@ } catch (QueryHelperException eee) { throw new TopiaPersistenceException("Execution de la requete impossible, requete source mal formée", eee); } + tTime += System.currentTimeMillis() - time; //TODO Pour les tests de perfs, a supprimer + nb++; //TODO Pour les tests de perfs, a supprimer return results; } @@ -954,11 +957,12 @@ try{ Connection conn = getConnection(); try{ - PreparedStatement sta = conn.prepareStatement(SQL.getProperty(SQL_LOAD_HISTORY)); + String query = SQL.getProperty(SQL_LOAD_HISTORY); + query = Util.setAllMultipleIds(query, context.getTransaction()); + PreparedStatement sta = conn.prepareStatement(query); try{ sta.setString(1, id); sta.setLong(2, -context.getTransaction().getId()); - sta.setObject(3, context.getTransaction().getIds(), Types.ARRAY); ResultSet rr = sta.executeQuery(); if(rr.next()){ result = !rr.getBoolean("isDeleted"); @@ -975,6 +979,9 @@ } return result; } + + public static int nb = 0; //TODO Pour les tests de perfs, a supprimer + public static long tTime = 0; //TODO Pour les tests de perfs, a supprimer } // PersistenceStorageJDBC Index: topia/src/java/org/codelutin/topia/persistence/TopiaJDBCQueryHelper.java diff -u topia/src/java/org/codelutin/topia/persistence/TopiaJDBCQueryHelper.java:1.4 topia/src/java/org/codelutin/topia/persistence/TopiaJDBCQueryHelper.java:1.5 --- topia/src/java/org/codelutin/topia/persistence/TopiaJDBCQueryHelper.java:1.4 Thu Aug 4 16:55:38 2005 +++ topia/src/java/org/codelutin/topia/persistence/TopiaJDBCQueryHelper.java Fri Aug 5 17:04:40 2005 @@ -23,9 +23,9 @@ * * @author Arnaud Thimel * Copyright Code Lutin - * @version $Revision: 1.4 $ + * @version $Revision: 1.5 $ * - * Mise a jour: $Date: 2005/08/04 16:55:38 $ + * Mise a jour: $Date: 2005/08/05 17:04:40 $ * par : $Author: thimel $ */ package org.codelutin.topia.persistence; @@ -48,6 +48,7 @@ import org.codelutin.queryparser.Select; import org.codelutin.queryparser.Where; import org.codelutin.topia.TopiaEntity; +import org.codelutin.topia.Util; public class TopiaJDBCQueryHelper extends QueryHelper { @@ -58,9 +59,10 @@ public static final String IN_AND_SELECT = "SELECT id, longdate FROM data WHERE "; public static final String LEAD_SELECT = "SELECT DISTINCT id FROM data WHERE "; - public static final String END_BEFORE_TYPE = "SELECT id, min(longdate) FROM management WHERE (id,longdate) IN (SELECT id, max(longdate) FROM management WHERE class='"; - public static final String END_MIDDLE_TYPE = "' AND (longdate in (?) OR (longdate>0 AND longdate<=?)) AND id NOT IN (SELECT id FROM management WHERE (longdate in (?) OR (longdate>0 AND longdate<=?)) AND isDeleted=true) GROUP BY id UNION SELECT id, longdate FROM management WHERE class='"; - public static final String END_AFTER_TYPE = "' AND longdate in (?) AND isDeleted=false) GROUP BY id)"; + public static final String END_BEFORE_TYPE = "SELECT id, min(longdate) FROM management WHERE (id,longdate) IN (SELECT id, max(longdate) FROM management m1 WHERE class='"; +// public static final String END_MIDDLE_TYPE = "' AND (longdate in (" + Util.SQL_IDS_KEY + ") OR (longdate>0 AND longdate<=?)) AND id NOT IN (SELECT id FROM management WHERE isDeleted=true AND (longdate in (" + Util.SQL_IDS_KEY + ") OR (longdate>0 AND longdate<=?))) GROUP BY id UNION SELECT id, longdate FROM management WHERE isDeleted=false AND class='"; + public static final String END_MIDDLE_TYPE = "' AND (longdate in (" + Util.SQL_IDS_KEY + ") OR (longdate>0 AND longdate<=?)) AND NOT EXISTS (SELECT * FROM management m2 WHERE isDeleted=true AND (longdate in (" + Util.SQL_IDS_KEY + ") OR (longdate>0 AND longdate<=?)) AND m1.id = m2.id) GROUP BY id UNION SELECT id, longdate FROM management WHERE isDeleted=false AND class='"; + public static final String END_AFTER_TYPE = "' AND longdate in (" + Util.SQL_IDS_KEY + ")) GROUP BY id)"; // public static final String LEAD_SELECT = "SELECT * FROM data WHERE "; // public static final String END_BEFORE_TYPE = "SELECT id, min(longdate) FROM management WHERE (id,longdate) IN (SELECT id, max(longdate) FROM management WHERE class='"; @@ -105,16 +107,13 @@ // utiliser la transaction pour ajouter les valeurs des 5 "?". Il faut : // -transaction.getId(), transaction.getId(), -transaction.getId(), transaction.getId(), -transaction.getId() // soit : -, +, -, +, - - long thetime = tt.getId(); if (queryBuilder.isQuestionMarkSet() && args.size() == 0) { log.log(Level.WARNING, "? utilisé mais aucun argument trouvé" + ", résultat de la requête non garanti !"); } - args.add(thetime); - args.add(-thetime); - args.add(thetime); - args.add(-thetime); - args.add(thetime); + request = Util.setAllMultipleIds(request, tt); + args.add(-tt.getId()); // - car on le veut en positif + args.add(-tt.getId()); } return request;