Hi, I don't understand all but You can track queries if you are using the DatabaseEventListener:
https://github.com/h2database/h2database/blob/master/h2/src/main/org/h2/api/DatabaseEventListener.java Generally we use connection url to set a event listener however you may be able to force it using another way. Regards, -- Nicolas Fortin IRSTV FR CNRS 2488 GIS http://orbisgis.org Spatial DB http://h2gis.org Noise http://noisemap.orbisgis.org Le vendredi 12 juin 2015 00:37:29 UTC+2, Pablo Beltran a écrit : > > Well, it looks like it is achievable by using the Parser -> collect all > the conditions recursively (conditionAndOr lef,right) -> getting the > tableName for each condition and its left and right columns (expressions, > values, etc). Hence the Explain command and the Plan were not the best > approach. Sorry but I'm not yet too much familiar with the API furthermore > a lot of methods to explore parsed queries are not public... Anyway thanks. > > 2015-06-11 18:47 GMT+02:00 Pablo Beltran <[email protected] <javascript:>> > : > >> The new attached picture (explain-plan_2.png) may help to understand it >> better. it's an screenshot of a query against two plugged tables. I've >> added some conditions (where clause) for each table. The execution plan is >> really awesome as the /* function */ comments show how the conditions >> affect to each table. >> >> With the plan I'm able to figure out that the query will perform well >> against the 3rd party system because each table includes values for the >> required columns. Otherwise it should/might be aborted. >> >> thanks. >> >> >> >> 2015-06-11 18:25 GMT+02:00 Pablo Beltran >> >>> Surely my question was not good and it brought some confusion. >>> >>> I need to access to the internal API because I'm using the H2 engine >>> with plugged tables from a 3rd party system (not a database). Then I >>> capture the users' queries just before invoke the 3rd party system and >>> populate the plugged tables with the fetched data from the 3rd party >>> system.... and some of those queries must be aborted if the users do not >>> use the "indexes" in the right way. >>> >>> Note: "indexes" are not indexes in the strict sense (defined on some >>> columns of a table). They are columns that users MUST include in the where >>> clause because are required by the 3rd party system API, but the users are >>> free for not doing it. Hence, If I was able to get the Plan I could analyze >>> the tables and the columns used by the users to filter data and validate >>> them against the scheme and abort potential full scans against the 3rd >>> party system, etc The best approach to achieve it is the execution plan as >>> it knows the execution order for the tables a well as the columns used as >>> filters for each table. >>> >>> I tried to resolve it by analyzing the query syntax with the Parser: get >>> the all the conditions etc. but it is a weak way and pretty difficult due >>> the complexity of the SQL syntax, so I discarded this approach, even more >>> after i saw that the Explain command is able to do such job much better. >>> >>> >>> Could you help please? >>> >>> Thanks, >>> Pablo >>> >>> 2015-06-11 18:08 GMT+02:00 Thomas Mueller <[email protected]>: >>> >>>> Hi, >>>> >>>> I don't understand, you just call st.execute("explain select * from >>>> table"). No need to use the internal API. >>>> >>>> Regards, >>>> Thomas >>>> >>>> >>>> On Thursday, June 11, 2015, Pablo Beltran <[email protected]> wrote: >>>> >>>>> Hi, >>>>> >>>>> i would like to get the same text jist like the H2 Web Console when a >>>>> plan is explained (Pls, see the attached picture), but I did not get it >>>>> yet >>>>> unfortunately. >>>>> >>>>> >>>>> >>>>> Connection conn = .... >>>>> >>>>> >>>>> Statment st = con.createStatment("SELECT * FROM TABLE"), >>>>> st.executeQuery(); >>>>> >>>>> .... >>>>> >>>>> >>>>> JdbcConnection jdbcConnection = (JdbcConnection) conn; >>>>> Session session = (Session) jdbcConnection.getSession(); >>>>> Command current = session.getCurrentCommand(); //this method has been >>>>> added to the Session class. >>>>> Parser parser = new Parser(session); >>>>> Prepared prepared = parser.prepare(current.toString()); //SELECT * >>>>> FROM TABLE >>>>> Explain exp = new Explain(session); >>>>> exp.setCommand(prepared); >>>>> >>>>> and next?? >>>>> >>>>> I've tried several things from here but without too much success. >>>>> >>>>> Any idea? >>>>> >>>>> Thanks in advance! >>>>> Pablo. >>>>> >>>> >>> >> > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/h2-database. For more options, visit https://groups.google.com/d/optout.
