#
# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code 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 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
module name java.sql
header exports java/sql,javax/sql requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;java.logging\u0020;flags\u0020;20,name\u0020;java.transaction.xa\u0020;flags\u0020;20,name\u0020;java.xml\u0020;flags\u0020;20 uses java/sql/Driver flags 8000

class name java/sql/BatchUpdateException
header extends java/sql/SQLException flags 21
innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409

class name java/sql/ConnectionBuilder
header extends java/lang/Object flags 601

class name java/sql/DriverManager
-method name getConnection descriptor (Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;
-method name getConnection descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
-method name getConnection descriptor (Ljava/lang/String;)Ljava/sql/Connection;
-method name getDriver descriptor (Ljava/lang/String;)Ljava/sql/Driver;
-method name deregisterDriver descriptor (Ljava/sql/Driver;)V
-method name getDrivers descriptor ()Ljava/util/Enumeration;
-method name drivers descriptor ()Ljava/util/stream/Stream;
method name getConnection descriptor (Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection; thrownTypes java/sql/SQLException flags 9
method name getConnection descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection; thrownTypes java/sql/SQLException flags 9
method name getConnection descriptor (Ljava/lang/String;)Ljava/sql/Connection; thrownTypes java/sql/SQLException flags 9
method name getDriver descriptor (Ljava/lang/String;)Ljava/sql/Driver; thrownTypes java/sql/SQLException flags 9
method name deregisterDriver descriptor (Ljava/sql/Driver;)V thrownTypes java/sql/SQLException flags 9
method name getDrivers descriptor ()Ljava/util/Enumeration; flags 9 signature ()Ljava/util/Enumeration<Ljava/sql/Driver;>;
method name drivers descriptor ()Ljava/util/stream/Stream; flags 9 signature ()Ljava/util/stream/Stream<Ljava/sql/Driver;>;

class name java/sql/JDBCType
header extends java/lang/Enum implements java/sql/SQLType flags 4031 signature Ljava/lang/Enum<Ljava/sql/JDBCType;>;Ljava/sql/SQLType;
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19

class name java/sql/SQLWarning
header extends java/sql/SQLException flags 21
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19

class name java/sql/ShardingKey
header extends java/lang/Object flags 601

class name java/sql/ShardingKeyBuilder
header extends java/lang/Object flags 601

class name java/sql/Statement
header extends java/lang/Object implements java/sql/Wrapper,java/lang/AutoCloseable flags 601
innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19

class name javax/sql/PooledConnectionBuilder
header extends java/lang/Object flags 601

class name javax/sql/XAConnectionBuilder
header extends java/lang/Object flags 601

