diff --git a/mondrian/src/main/java/mondrian/spi/CacheAdapter.java b/mondrian/src/main/java/mondrian/spi/CacheAdapter.java new file mode 100755 index 0000000000..2bcc70c980 --- /dev/null +++ b/mondrian/src/main/java/mondrian/spi/CacheAdapter.java @@ -0,0 +1,19 @@ + +package mondrian.spi; + +import java.util.Set; + +public interface CacheAdapter { + + V get(K key); + + + void put(K key, V value); + + void invalidate(K key); + + void invalidateAll(Set keys); + + void invalidateAll(); + +} diff --git a/mondrian/src/main/java/mondrian/spi/Messages.java b/mondrian/src/main/java/mondrian/spi/Messages.java new file mode 100755 index 0000000000..57c8084411 --- /dev/null +++ b/mondrian/src/main/java/mondrian/spi/Messages.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2002, 2024, Oracle and/or its affiliates. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by + * the Free Software Foundation. + * + * This program is designed to work with certain software that is licensed under separate terms, as designated in a particular file or component or in + * included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the + * separately licensed software that they have either included with the program or referenced in the documentation. + * + * Without limiting anything contained in the foregoing, this file, which is part of MySQL Connector/J, is also subject to the Universal FOSS Exception, + * version 1.0, a copy of which can be found at http://oss.oracle.com/licenses/universal-foss-exception. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. + * + * You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +package mondrian.spi; + +import java.text.MessageFormat; +import java.util.Locale; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +/** + * Support for localized messages. + */ +public class Messages { + + private static final String BUNDLE_NAME = "com.mysql.cj.LocalizedErrorMessages"; + + private static final ResourceBundle RESOURCE_BUNDLE; + private static final Object[] emptyObjectArray = {}; + + static { + ResourceBundle temp = null; + + // + // Overly-pedantic here, some appserver and JVM combos don't deal well with the no-args version, others don't deal well with the three-arg version, so + // we need to try both :( + // + + try { + temp = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault(), Messages.class.getClassLoader()); + } catch (Throwable t) { + try { + temp = ResourceBundle.getBundle(BUNDLE_NAME); + } catch (Throwable t2) { + RuntimeException rt = new RuntimeException("Can't load resource bundle due to underlying exception " + t.toString()); + rt.initCause(t2); + + throw rt; + } + } finally { + RESOURCE_BUNDLE = temp; + } + } + + /** + * Returns the localized message for the given message key + * + * @param key + * the message key + * @return The localized message for the key + */ + public static String getString(String key) { + return getString(key, emptyObjectArray); + } + + public static String getString(String key, Object[] args) { + if (RESOURCE_BUNDLE == null) { + throw new RuntimeException("Localized messages from resource bundle '" + BUNDLE_NAME + "' not loaded during initialization of driver."); + } + + try { + if (key == null) { + throw new IllegalArgumentException("Message key can not be null"); + } + + String message = RESOURCE_BUNDLE.getString(key); + + if (message == null) { + message = "Missing error message for key '" + key + "'"; + } + + return MessageFormat.format(message, args); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } + + /** + * Dis-allow construction ... + */ + private Messages() { + } + +} \ No newline at end of file diff --git a/mondrian/src/main/java/mondrian/spi/ProfilerEvent.java b/mondrian/src/main/java/mondrian/spi/ProfilerEvent.java new file mode 100755 index 0000000000..992bf57c6c --- /dev/null +++ b/mondrian/src/main/java/mondrian/spi/ProfilerEvent.java @@ -0,0 +1,130 @@ + +package mondrian.spi; + +public interface ProfilerEvent { + + /** + * Profiler event for usage advisor + */ + public static final byte TYPE_USAGE = 0; + + /** + * Profiler creating object type event + */ + public static final byte TYPE_OBJECT_CREATION = 1; + + /** + * Profiler event for prepared statements being prepared + */ + public static final byte TYPE_PREPARE = 2; + + /** + * Profiler event for a query being executed + */ + public static final byte TYPE_QUERY = 3; + + /** + * Profiler event for prepared statements being executed + */ + public static final byte TYPE_EXECUTE = 4; + + /** + * Profiler event for result sets being retrieved + */ + public static final byte TYPE_FETCH = 5; + + /** + * Profiler event for slow query + */ + public static final byte TYPE_SLOW_QUERY = 6; + + /** + * Not available value. + */ + public static final byte NA = -1; + + /** + * Returns the event type + * + * @return the event type + */ + byte getEventType(); + + /** + * Returns the host name the event occurred on. + * + * @return host name + */ + String getHostName(); + + /** + * Returns the database the event occurred on. + * + * @return the database in use + */ + String getDatabase(); + + /** + * Returns the id of the associated connection (-1 for none). + * + * @return the connection in use + */ + long getConnectionId(); + + /** + * Returns the id of the associated statement (-1 for none). + * + * @return the statement in use + */ + int getStatementId(); + + /** + * Returns the id of the associated result set (-1 for none). + * + * @return the result set in use + */ + int getResultSetId(); + + /** + * Returns the time (in System.currentTimeMillis() form) when this event was created. + * + * @return the time this event was created + */ + long getEventCreationTime(); + + /** + * Returns the duration of the event in milliseconds + * + * @return the duration of the event in milliseconds + */ + long getEventDuration(); + + /** + * Returns the units for getEventDuration() + * + * @return name of duration units + */ + String getDurationUnits(); + + /** + * Returns the description of where the event was created. + * + * @return a description of where this event was created. + */ + String getEventCreationPointAsString(); + + /** + * Returns the optional message for this event + * + * @return the message stored in this event + */ + String getMessage(); + + /** + * Creates a binary representation of this event. + * + * @return a binary representation of this event + */ + byte[] pack(); + +} \ No newline at end of file