[766] | 1 | /* |
---|
| 2 | Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved., Inc. All rights reserved. |
---|
| 3 | U.S. Government Rights - Commercial software. Government users are subject |
---|
| 4 | to the Sun Microsystems, Inc. standard license agreement and applicable |
---|
| 5 | provisions of the FAR and its supplements. Use is subject to license terms. |
---|
| 6 | This distribution may include materials developed by third parties.Sun, |
---|
| 7 | Sun Microsystems, the Sun logo and MySQL Enterprise Monitor are |
---|
| 8 | trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. |
---|
| 9 | and other countries. |
---|
| 10 | |
---|
| 11 | Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved., Inc. Tous droits réservés. |
---|
| 12 | L'utilisation est soumise aux termes du contrat de licence.Cette |
---|
| 13 | distribution peut comprendre des composants développés par des tierces |
---|
| 14 | parties.Sun, Sun Microsystems,  le logo Sun et  MySQL Enterprise Monitor sont |
---|
| 15 | des marques de fabrique ou des marques déposées de Sun Microsystems, Inc. |
---|
| 16 | aux Etats-Unis et dans du'autres pays. |
---|
| 17 | |
---|
| 18 | */ |
---|
| 19 | |
---|
| 20 | package com.mysql.jdbc; |
---|
| 21 | |
---|
| 22 | import java.sql.SQLException; |
---|
| 23 | import java.util.Properties; |
---|
| 24 | |
---|
| 25 | public interface StatementInterceptorV2 extends Extension { |
---|
| 26 | |
---|
| 27 | /** |
---|
| 28 | * Called once per connection that wants to use the interceptor |
---|
| 29 | * |
---|
| 30 | * The properties are the same ones passed in in the URL or arguments to |
---|
| 31 | * Driver.connect() or DriverManager.getConnection(). |
---|
| 32 | * |
---|
| 33 | * @param conn the connection for which this interceptor is being created |
---|
| 34 | * @param props configuration values as passed to the connection. Note that |
---|
| 35 | * in order to support javax.sql.DataSources, configuration properties specific |
---|
| 36 | * to an interceptor <strong>must</strong> be passed via setURL() on the |
---|
| 37 | * DataSource. StatementInterceptor properties are not exposed via |
---|
| 38 | * accessor/mutator methods on DataSources. |
---|
| 39 | * |
---|
| 40 | * @throws SQLException should be thrown if the the StatementInterceptor |
---|
| 41 | * can not initialize itself. |
---|
| 42 | */ |
---|
| 43 | |
---|
| 44 | public abstract void init(Connection conn, Properties props) throws SQLException; |
---|
| 45 | |
---|
| 46 | /** |
---|
| 47 | * Called before the given statement is going to be sent to the |
---|
| 48 | * server for processing. |
---|
| 49 | * |
---|
| 50 | * Interceptors are free to return a result set (which must implement the |
---|
| 51 | * interface com.mysql.jdbc.ResultSetInternalMethods), and if so, |
---|
| 52 | * the server will not execute the query, and the given result set will be |
---|
| 53 | * returned to the application instead. |
---|
| 54 | * |
---|
| 55 | * This method will be called while the connection-level mutex is held, so |
---|
| 56 | * it will only be called from one thread at a time. |
---|
| 57 | * |
---|
| 58 | * @param sql the SQL representation of the statement |
---|
| 59 | * @param interceptedStatement the actual statement instance being intercepted |
---|
| 60 | * @param connection the connection the statement is using (passed in to make |
---|
| 61 | * thread-safe implementations straightforward) |
---|
| 62 | * |
---|
| 63 | * @return a result set that should be returned to the application instead |
---|
| 64 | * of results that are created from actual execution of the intercepted |
---|
| 65 | * statement. |
---|
| 66 | * |
---|
| 67 | * @throws SQLException if an error occurs during execution |
---|
| 68 | * |
---|
| 69 | * @see com.mysql.jdbc.ResultSetInternalMethods |
---|
| 70 | */ |
---|
| 71 | |
---|
| 72 | public abstract ResultSetInternalMethods preProcess(String sql, |
---|
| 73 | Statement interceptedStatement, Connection connection) |
---|
| 74 | throws SQLException; |
---|
| 75 | |
---|
| 76 | /** |
---|
| 77 | * Should the driver execute this interceptor only for the |
---|
| 78 | * "original" top-level query, and not put it in the execution |
---|
| 79 | * path for queries that may be executed from other interceptors? |
---|
| 80 | * |
---|
| 81 | * If an interceptor issues queries using the connection it was created for, |
---|
| 82 | * and does not return <code>true</code> for this method, it must ensure |
---|
| 83 | * that it does not cause infinite recursion. |
---|
| 84 | * |
---|
| 85 | * @return true if the driver should ensure that this interceptor is only |
---|
| 86 | * executed for the top-level "original" query. |
---|
| 87 | */ |
---|
| 88 | public abstract boolean executeTopLevelOnly(); |
---|
| 89 | |
---|
| 90 | /** |
---|
| 91 | * Called by the driver when this extension should release any resources |
---|
| 92 | * it is holding and cleanup internally before the connection is |
---|
| 93 | * closed. |
---|
| 94 | */ |
---|
| 95 | public abstract void destroy(); |
---|
| 96 | |
---|
| 97 | /** |
---|
| 98 | * Called after the given statement has been sent to the server |
---|
| 99 | * for processing, instead of the StatementAware postProcess() of the earlier |
---|
| 100 | * api. |
---|
| 101 | * |
---|
| 102 | * Interceptors are free to inspect the "original" result set, and if a |
---|
| 103 | * different result set is returned by the interceptor, it is used in place |
---|
| 104 | * of the "original" result set. (the result set returned by the interceptor |
---|
| 105 | * must implement the interface |
---|
| 106 | * com.mysql.jdbc.ResultSetInternalMethods). |
---|
| 107 | * |
---|
| 108 | * This method will be called while the connection-level mutex is held, so |
---|
| 109 | * it will only be called from one thread at a time. |
---|
| 110 | * |
---|
| 111 | * @param sql the SQL representation of the statement |
---|
| 112 | * @param interceptedStatement the actual statement instance being intercepted |
---|
| 113 | * @param connection the connection the statement is using (passed in to make |
---|
| 114 | * thread-safe implementations straightforward) |
---|
| 115 | * |
---|
| 116 | * @return a result set that should be returned to the application instead |
---|
| 117 | * of results that are created from actual execution of the intercepted |
---|
| 118 | * statement. |
---|
| 119 | * |
---|
| 120 | * @throws SQLException if an error occurs during execution |
---|
| 121 | * |
---|
| 122 | * @see com.mysql.jdbc.ResultSetInternalMethods |
---|
| 123 | */ |
---|
| 124 | public abstract ResultSetInternalMethods postProcess(String sql, |
---|
| 125 | Statement interceptedStatement, |
---|
| 126 | ResultSetInternalMethods originalResultSet, |
---|
| 127 | Connection connection, int warningCount, boolean noIndexUsed, boolean noGoodIndexUsed, |
---|
| 128 | SQLException statementException) throws SQLException; |
---|
| 129 | } |
---|