/* * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * * 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 also distributed with certain software (including but not * limited to OpenSSL) 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 included with MySQL. * * 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 com.mysql.cj.xdevapi; import java.util.List; /** * X DevAPI introduces a new, high-level database connection concept that is called Session. When working with X DevAPI it is important to understand this new * Session concept which is different from working with traditional low-level MySQL connections. *
* An application using the Session class can be run against a single MySQL server or large number of MySQL servers forming a sharding cluster with no code * changes. *
* When using literal/verbatim SQL the common API patterns are mostly the same compared to using DML and CRUD operations on Tables and Collections. Two * differences exist: setting the current schema and escaping names. *
* You cannot call {@link Session#getSchema(String)} or {@link Session#getDefaultSchema()} to obtain a {@link Schema} object against which you can * issue verbatin SQL statements. The Schema object does not feature a sql() function. *
* The sql() function is a method of the {@link Session} class. Use {@link Session#sql(String)} and the SQL command USE to change the current * schema *
* Session session = SessionFactory.getSession("root:s3kr3t@localhost");
* session.sql("USE test");
*
* If a Session has been established using a data source file the name of the default schema can be obtained to change the current database. *
* Properties p = new Properties();
* p.setProperty("dataSourceFile", "/home/app_instance50/mysqlxconfig.json");
* Session session = SessionFactory.getSession(p);
* String defaultSchema = session.getDefaultSchema().getName();
* session.sql("USE ?").bind(defaultSchema).execute();
*
* A quoting function exists to escape SQL names/identifiers. StringUtils.quoteIdentifier(String, boolean) will escape the identifier given in * accordance to the settings of the current connection. * The escape function must not be used to escape values. Use the value bind syntax of {@link Session#sql(String)} instead. *
* // use bind syntax for values
* session.sql("DROP TABLE IF EXISTS ?").bind(name).execute();
*
* // use escape function to quote names/identifier
* var create = "CREATE TABLE ";
* create += StringUtils.quoteIdentifier(name, true);
* create += "(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT");
*
* session.sql(create).execute();
*
* Users of the CRUD API do not need to escape identifiers. This is true for working with collections and for working with relational tables.
*/
public interface Session {
/**
* Retrieve the list of Schema objects for which the current user has access.
*
* @return list of Schema objects
*/
List