You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by el...@apache.org on 2017/04/01 20:36:18 UTC
[26/51] [partial] calcite-avatica git commit: [CALCITE-1717] Remove
Calcite code and lift avatica
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/pom.xml
----------------------------------------------------------------------
diff --git a/avatica/pom.xml b/avatica/pom.xml
deleted file mode 100644
index 5860bd9..0000000
--- a/avatica/pom.xml
+++ /dev/null
@@ -1,815 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to you under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache</groupId>
- <artifactId>apache</artifactId>
- <version>18</version>
- <!-- Tell Maven that it's OK that we're not attached to the parent directory -->
- <relativePath />
- </parent>
-
- <!-- The basics. -->
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-parent</artifactId>
- <packaging>pom</packaging>
- <version>1.10.0-SNAPSHOT</version>
-
- <!-- More project information. -->
- <name>Apache Calcite Avatica Project</name>
- <description>Avatica is a JDBC driver framework which is a part of Apache Calcite</description>
- <url>https://calcite.apache.org/avatica</url>
- <inceptionYear>2012</inceptionYear>
-
- <mailingLists>
- <mailingList>
- <name>Apache Calcite developers list</name>
- <subscribe>dev-subscribe@calcite.apache.org</subscribe>
- <unsubscribe>dev-unsubscribe@calcite.apache.org</unsubscribe>
- <post>dev@calcite.apache.org</post>
- <archive>https://mail-archives.apache.org/mod_mbox/calcite-dev</archive>
- </mailingList>
- </mailingLists>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <top.dir>${project.basedir}</top.dir>
- <avatica.release.version>${project.version}</avatica.release.version>
- <version.major>1</version.major>
- <version.minor>9</version.minor>
- <!-- This list is in alphabetical order. -->
- <bouncycastle.version>1.55</bouncycastle.version>
- <build-helper-maven-plugin.version>1.9</build-helper-maven-plugin.version>
- <checksum-maven-plugin.version>1.2</checksum-maven-plugin.version>
- <dropwizard-metrics3.version>3.1.2</dropwizard-metrics3.version>
- <forbiddenapis.version>2.3</forbiddenapis.version>
- <freemarker.version>2.3.19</freemarker.version>
- <git-commit-id-plugin.version>2.1.9</git-commit-id-plugin.version>
- <!-- We support guava versions as old as 14.0.1 (the version used by Hive)
- but prefer more recent versions. -->
- <guava.version>14.0.1</guava.version>
- <h2.version>1.4.185</h2.version>
- <hamcrest.version>1.3</hamcrest.version>
- <hsqldb.version>2.3.1</hsqldb.version>
- <httpclient.version>4.5.2</httpclient.version>
- <httpcore.version>4.4.4</httpcore.version>
- <hydromatic-toolbox.version>0.3</hydromatic-toolbox.version>
- <jackson.version>2.6.3</jackson.version>
- <jcip-annotations.version>1.0-1</jcip-annotations.version>
- <jcommander.version>1.48</jcommander.version>
- <jetty.version>9.2.19.v20160908</jetty.version>
- <junit.version>4.12</junit.version>
- <kerby.version>1.0.0-RC2</kerby.version>
- <maven-checkstyle-plugin.version>2.12.1</maven-checkstyle-plugin.version>
- <maven-dependency-plugin.version>2.10</maven-dependency-plugin.version>
- <!-- Apache 18 has 2.10.3, need 2.10.4 for [MJAVADOC-442]. -->
- <maven-javadoc-plugin.version>2.10.4</maven-javadoc-plugin.version>
- <maven-scm-provider.version>1.9.4</maven-scm-provider.version>
- <maven-shade-plugin.version>2.1</maven-shade-plugin.version>
- <mockito.version>2.5.5</mockito.version>
- <protobuf.version>3.1.0</protobuf.version>
- <scott-data-hsqldb.version>0.1</scott-data-hsqldb.version>
- <servlet.version>3.0.1</servlet.version>
- <slf4j.version>1.7.13</slf4j.version>
- </properties>
-
- <issueManagement>
- <system>Jira</system>
- <url>https://issues.apache.org/jira/browse/CALCITE</url>
- </issueManagement>
-
- <scm>
- <connection>scm:git:https://git-wip-us.apache.org/repos/asf/calcite.git</connection>
- <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/calcite.git</developerConnection>
- <url>https://github.com/apache/calcite</url>
- <tag>HEAD</tag>
- </scm>
-
- <modules>
- <module>core</module>
- <module>metrics</module>
- <module>metrics-dropwizardmetrics3</module>
- <module>noop-driver</module>
- <module>server</module>
- <module>tck</module>
- <module>standalone-server</module>
- <module>shaded/core</module>
- </modules>
-
- <!-- No dependencies here. Declare dependency VERSIONS in
- dependencyManagement, below, and each dependency in the module that uses
- it. -->
- <dependencies />
-
- <dependencyManagement>
- <dependencies>
- <!-- Sorted by groupId, artifactId; calcite dependencies first. -->
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-core</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-metrics</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-noop</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-tck</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-server</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-core</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- </dependency>
-
- <!-- Now third-party dependencies, sorted by groupId and artifactId. -->
- <dependency>
- <groupId>com.beust</groupId>
- <artifactId>jcommander</artifactId>
- <version>${jcommander.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- <version>${jackson.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- <version>${jackson.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>${jackson.version}</version>
- </dependency>
- <dependency>
- <groupId>com.github.stephenc.jcip</groupId>
- <artifactId>jcip-annotations</artifactId>
- <version>${jcip-annotations.version}</version>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>${guava.version}</version>
- </dependency>
- <dependency>
- <groupId>com.google.protobuf</groupId>
- <artifactId>protobuf-java</artifactId>
- <version>${protobuf.version}</version>
- </dependency>
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <version>${h2.version}</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>${servlet.version}</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>${junit.version}</version>
- </dependency>
- <dependency>
- <groupId>net.hydromatic</groupId>
- <artifactId>scott-data-hsqldb</artifactId>
- <version>${scott-data-hsqldb.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.kerby</groupId>
- <artifactId>kerb-client</artifactId>
- <version>${kerby.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.kerby</groupId>
- <artifactId>kerb-core</artifactId>
- <version>${kerby.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.kerby</groupId>
- <artifactId>kerb-simplekdc</artifactId>
- <version>${kerby.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>${httpclient.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore</artifactId>
- <version>${httpcore.version}</version>
- </dependency>
- <dependency>
- <groupId>org.bouncycastle</groupId>
- <artifactId>bcpkix-jdk15on</artifactId>
- <version>${bouncycastle.version}</version>
- </dependency>
- <dependency>
- <groupId>org.bouncycastle</groupId>
- <artifactId>bcprov-jdk15on</artifactId>
- <version>${bouncycastle.version}</version>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <version>${mockito.version}</version>
- </dependency>
- <dependency>
- <groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-core</artifactId>
- <version>${hamcrest.version}</version>
- </dependency>
- <dependency>
- <groupId>org.hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- <version>${hsqldb.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-security</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <build>
- <extensions>
- <extension>
- <groupId>kr.motd.maven</groupId>
- <artifactId>os-maven-plugin</artifactId>
- <version>1.5.0.Final</version>
- </extension>
- </extensions>
- <plugins>
- <plugin>
- <groupId>de.thetaphi</groupId>
- <artifactId>forbiddenapis</artifactId>
- <configuration>
- <!-- if the used Java version is too new, don't fail, just do nothing: -->
- <failOnUnsupportedJava>false</failOnUnsupportedJava>
- <bundledSignatures>
- <!--
- This will automatically choose the right
- signatures based on 'maven.compiler.target':
- -->
- <bundledSignature>jdk-unsafe</bundledSignature>
- <bundledSignature>jdk-deprecated</bundledSignature>
- <!-- disallow undocumented classes like sun.misc.Unsafe: -->
- <bundledSignature>jdk-non-portable</bundledSignature>
- </bundledSignatures>
- <signaturesFiles>
- <signaturesFile>${top.dir}/src/main/config/forbidden-apis/signatures.txt</signaturesFile>
- </signaturesFiles>
- <excludes>
- <exclude>**/org/apache/calcite/avatica/tck/Unsafe.class</exclude>
- <exclude>**/org/apache/calcite/avatica/util/Unsafe.class</exclude>
- </excludes>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>check</goal>
- <goal>testCheck</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apache-rat-plugin</artifactId>
- <configuration>
- <excludes>
- <!-- Do not exclude site/target; it should not exist
- in any sandbox from which you are making a
- release. Also, do not exclude site/.sass-cache. -->
- <!-- Files generated by Jekyll. -->
- <exclude>site/_includes/anchor_links.html</exclude>
- <exclude>site/_includes/docs_contents.html</exclude>
- <exclude>site/_includes/docs_contents_mobile.html</exclude>
- <exclude>site/_includes/docs_option.html</exclude>
- <exclude>site/_includes/docs_ul.html</exclude>
- <exclude>site/_includes/footer.html</exclude>
- <exclude>site/_includes/header.html</exclude>
- <exclude>site/_includes/news_contents.html</exclude>
- <exclude>site/_includes/news_contents_mobile.html</exclude>
- <exclude>site/_includes/news_item.html</exclude>
- <exclude>site/_includes/primary-nav-items.html</exclude>
- <exclude>site/_includes/section_nav.html</exclude>
- <exclude>site/_includes/top.html</exclude>
- <exclude>site/_layouts/default.html</exclude>
- <exclude>site/_layouts/docs.html</exclude>
- <exclude>site/_layouts/external.html</exclude>
- <exclude>site/_layouts/news.html</exclude>
- <exclude>site/_layouts/news_item.html</exclude>
- <exclude>site/_layouts/page.html</exclude>
- <exclude>site/_sass/**</exclude>
- <exclude>site/css/screen.scss</exclude>
- <exclude>site/fonts/**</exclude>
- <exclude>site/js/**</exclude>
- <!-- Images -->
- <exclude>site/img/*.png</exclude>
- <exclude>site/favicon.ico</exclude>
- </excludes>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <executions>
- <execution>
- <id>attach-sources</id>
- <phase>verify</phase>
- <goals>
- <goal>jar-no-fork</goal>
- <goal>test-jar-no-fork</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.7</source>
- <target>1.7</target>
- <compilerArgument>-Xlint:deprecation</compilerArgument>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <executions>
- <execution>
- <id>validate</id>
- <phase>validate</phase>
- <configuration>
- <configLocation>${top.dir}/src/main/config/checkstyle/checker.xml</configLocation>
- <suppressionsLocation>${top.dir}/src/main/config/checkstyle/suppressions.xml</suppressionsLocation>
- <consoleOutput>true</consoleOutput>
- <headerLocation>${top.dir}/src/main/config/checkstyle/header.txt</headerLocation>
- <failOnViolation>true</failOnViolation>
- <includeTestSourceDirectory>true</includeTestSourceDirectory>
- </configuration>
- <goals>
- <goal>check</goal>
- </goals>
- </execution>
- </executions>
- <dependencies>
- <dependency>
- <groupId>net.hydromatic</groupId>
- <artifactId>toolbox</artifactId>
- <version>${hydromatic-toolbox.version}</version>
- </dependency>
- </dependencies>
- </plugin>
- <plugin>
- <!-- override default version 2.8 for access to additional config settings -->
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>${maven-dependency-plugin.version}</version>
- <executions>
- <execution>
- <id>analyze</id>
- <goals>
- <goal>analyze-only</goal>
- </goals>
- <configuration>
- <failOnWarning>true</failOnWarning>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <!-- This is the configuration used by "mvn javadoc:javadoc". It is
- configured strict, so that it shows errors such as broken links in
- javadoc on private methods. The configuration for "mvn site" is
- under "reporting", and is more lenient. -->
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <configuration>
- <links>
- <link>https://docs.oracle.com/javase/8/docs/api/</link>
- </links>
- <show>private</show>
- </configuration>
- </plugin>
- <plugin>
- <!-- Override apache parent POM's definition of release
- plugin. If we don't specify gitexe version, git doesn't
- commit during release process. -->
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-release-plugin</artifactId>
- <dependencies>
- <dependency>
- <groupId>org.apache.maven.scm</groupId>
- <artifactId>maven-scm-provider-gitexe</artifactId>
- <version>${maven-scm-provider.version}</version>
- </dependency>
- </dependencies>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <!-- Make sure every sub-project has LICENSE, NOTICE and
- git.properties in its jar's META-INF directory. -->
- <executions>
- <execution>
- <id>add-resource</id>
- <phase>generate-resources</phase>
- <goals>
- <goal>add-resource</goal>
- <goal>add-test-resource</goal>
- </goals>
- <configuration>
- <resources>
- <resource>
- <directory>${top.dir}</directory>
- <targetPath>META-INF</targetPath>
- <includes>
- <include>LICENSE</include>
- <include>NOTICE</include>
- </includes>
- </resource>
- <resource>
- <directory>${top.dir}/target</directory>
- <targetPath>META-INF</targetPath>
- <includes>
- <include>git.properties</include>
- </includes>
- </resource>
- </resources>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
-
- <pluginManagement>
- <plugins>
- <!-- Sorted by groupId, artifactId. -->
- <plugin>
- <groupId>com.googlecode.fmpp-maven-plugin</groupId>
- <artifactId>fmpp-maven-plugin</artifactId>
- <version>${fmpp-maven-plugin.version}</version>
- <dependencies>
- <dependency>
- <groupId>org.freemarker</groupId>
- <artifactId>freemarker</artifactId>
- <version>${freemarker.version}</version>
- </dependency>
- </dependencies>
- </plugin>
- <plugin>
- <groupId>de.thetaphi</groupId>
- <artifactId>forbiddenapis</artifactId>
- <version>${forbiddenapis.version}</version>
- </plugin>
- <plugin>
- <groupId>net.hydromatic</groupId>
- <artifactId>hydromatic-resource-maven-plugin</artifactId>
- <version>${hydromatic-resource.version}</version>
- </plugin>
- <plugin>
- <groupId>net.ju-n.maven.plugins</groupId>
- <artifactId>checksum-maven-plugin</artifactId>
- <version>${checksum-maven-plugin.version}</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <version>${maven-checkstyle-plugin.version}</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-failsafe-plugin</artifactId>
- <executions>
- <execution>
- <id>failsafe-integration-test</id>
- <goals>
- <goal>integration-test</goal>
- </goals>
- <phase>integration-test</phase>
- <configuration>
- <threadCount>6</threadCount>
- <parallel>both</parallel>
- <argLine>-Xmx1024m</argLine>
- </configuration>
- </execution>
- <execution>
- <id>failsafe-verify</id>
- <goals>
- <goal>verify</goal>
- </goals>
- <phase>verify</phase>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <version>${maven-javadoc-plugin.version}</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <version>${maven-shade-plugin.version}</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <argLine>-Xmx1536m -XX:MaxPermSize=256m -Duser.timezone=${user.timezone}</argLine>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <version>${build-helper-maven-plugin.version}</version>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
- <version>${javacc-maven-plugin.version}</version>
- </plugin>
- <plugin>
- <groupId>pl.project13.maven</groupId>
- <artifactId>git-commit-id-plugin</artifactId>
- <version>${git-commit-id-plugin.version}</version>
- </plugin>
- <plugin>
- <groupId>org.xolstice.maven.plugins</groupId>
- <artifactId>protobuf-maven-plugin</artifactId>
- <version>0.5.0</version>
- <configuration>
- <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
- <protoSourceRoot>${basedir}/src/main/protobuf/</protoSourceRoot>
- <outputDirectory>${basedir}/src/main/java/</outputDirectory>
- <clearOutputDirectory>false</clearOutputDirectory>
- <checkStaleness>true</checkStaleness>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
- </build>
-
- <reporting>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <configuration>
- <links>
- <link>https://docs.oracle.com/javase/8/docs/api/</link>
- </links>
- <notimestamp>true</notimestamp>
- <windowtitle>Apache Calcite Avatica API</windowtitle>
- </configuration>
- </plugin>
- </plugins>
- </reporting>
-
- <repositories>
- <repository>
- <id>central</id>
- <name>Central Repository</name>
- <url>http://repo.maven.apache.org/maven2</url>
- <layout>default</layout>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
-
- <profiles>
- <profile>
- <!-- This profile adds/overrides few features of the 'apache-release'
- profile in the parent pom. -->
- <id>apache-release</id>
- <build>
- <plugins>
- <!-- Apache-RAT checks for files without headers.
- If run on a messy developer's sandbox, it will fail.
- This serves as a reminder to only build a release in a clean
- sandbox! -->
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apache-rat-plugin</artifactId>
- <executions>
- <execution>
- <phase>verify</phase>
- <goals>
- <goal>check</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>net.ju-n.maven.plugins</groupId>
- <artifactId>checksum-maven-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>artifacts</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <algorithms>
- <algorithm>MD5</algorithm>
- <algorithm>SHA-1</algorithm>
- </algorithms>
- <failOnError>false</failOnError>
- </configuration>
- </plugin>
- <!-- Override the parent assembly execution to customize the assembly
- descriptor and final name. -->
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <executions>
- <execution>
- <id>source-release-assembly</id>
- <phase>none</phase>
- </execution>
- <execution>
- <id>source-release-assembly-calcite</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- <configuration>
- <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
- <appendAssemblyId>false</appendAssemblyId>
- <descriptor>${top.dir}/src/main/config/assemblies/source-assembly.xml</descriptor>
- <finalName>apache-calcite-avatica-${project.version}-src</finalName>
- <tarLongFileMode>gnu</tarLongFileMode>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <artifactId>maven-remote-resources-plugin</artifactId>
- <executions>
- <execution>
- <id>root-resources</id>
- <goals>
- <goal>process</goal>
- </goals>
- <configuration>
- <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
- <resourceBundles>
- <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
- </resourceBundles>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <id>it</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-failsafe-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <!-- CALCITE-537: workaround for MRRESOURCES-91
- Avoid overwrite of the destination file if the produced
- contents is the same.
- Apache pom overwrites NOTICE, DEPENDENCIES, and LICENSE files, however
- we do not want recompile the module every time. -->
- <id>skip-apache-licenses</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- <file><exists>target/maven-shared-archive-resources/META-INF/LICENSE</exists></file>
- </activation>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-remote-resources-plugin</artifactId>
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <!-- Generate git.properties on first build -->
- <id>generate-git-id</id>
- <activation>
- <activeByDefault>false</activeByDefault>
- <!-- Note: <missing> here does NOT support interpolation,
- so technically, this profile is active for sub-modules.
- It would be nice to use ${top.dir}/target/... here, but
- it is not possible.
- However sub-modules lack .git folder, so no git.properties
- is generated. -->
- <file>
- <missing>target/git.properties</missing>
- </file>
- </activation>
- <build>
- <plugins>
- <plugin>
- <groupId>pl.project13.maven</groupId>
- <artifactId>git-commit-id-plugin</artifactId>
- <inherited>false</inherited>
- <executions>
- <execution>
- <goals>
- <goal>revision</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat>
- <verbose>false</verbose>
- <skipPoms>false</skipPoms>
- <generateGitPropertiesFile>true</generateGitPropertiesFile>
- <generateGitPropertiesFilename>target/git.properties</generateGitPropertiesFilename>
- <failOnNoGitDirectory>false</failOnNoGitDirectory>
- <gitDescribe>
- <skip>false</skip>
- <always>false</always>
- <abbrev>7</abbrev>
- <dirty>-dirty</dirty>
- <forceLongFormat>true</forceLongFormat>
- </gitDescribe>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
-</project>
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/server/pom.xml
----------------------------------------------------------------------
diff --git a/avatica/server/pom.xml b/avatica/server/pom.xml
deleted file mode 100644
index f2eee25..0000000
--- a/avatica/server/pom.xml
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to you under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-parent</artifactId>
- <version>1.10.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>avatica-server</artifactId>
- <packaging>jar</packaging>
- <name>Apache Calcite Avatica Server</name>
- <description>JDBC server.</description>
-
- <properties>
- <top.dir>${project.basedir}/..</top.dir>
- </properties>
-
- <dependencies>
- <!-- Sorted by groupId, artifactId; calcite dependencies first. Put versions
- in dependencyManagement in the root POM, not here. -->
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-metrics</artifactId>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-security</artifactId>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- </dependency>
-
- <!-- test dependencies -->
- <dependency>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-core</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <!-- Used in RemoteDriverTest but dependency not detected by maven-dependency-plugin:2.8:analyze -->
- <groupId>net.hydromatic</groupId>
- <artifactId>scott-data-hsqldb</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.kerby</groupId>
- <artifactId>kerb-client</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.kerby</groupId>
- <artifactId>kerb-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.kerby</groupId>
- <artifactId>kerb-simplekdc</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <!-- Used in RemoteDriverTest but dependency not detected by maven-dependency-plugin:2.8:analyze -->
- <groupId>org.hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.github.stephenc.jcip</groupId>
- <artifactId>jcip-annotations</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.bouncycastle</groupId>
- <artifactId>bcpkix-jdk15on</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.bouncycastle</groupId>
- <artifactId>bcprov-jdk15on</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <build>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.eclipse.m2e</groupId>
- <artifactId>lifecycle-mapping</artifactId>
- <version>1.0.0</version>
- <configuration>
- <lifecycleMappingMetadata>
- <pluginExecutions>
- <pluginExecution>
- <pluginExecutionFilter>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <versionRange>[2.12.1,)</versionRange>
- <goals>
- <goal>check</goal>
- </goals>
- </pluginExecutionFilter>
- <action>
- <ignore />
- </action>
- </pluginExecution>
- </pluginExecutions>
- </lifecycleMappingMetadata>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
- <plugins>
- <!-- Parent module has the same plugin and does the work of
- generating -sources.jar for each project. But without the
- plugin declared here, IDEs don't know the sources are
- available. -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <executions>
- <execution>
- <id>attach-sources</id>
- <phase>verify</phase>
- <goals>
- <goal>jar-no-fork</goal>
- <goal>test-jar-no-fork</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>${maven-dependency-plugin.version}</version>
- <!-- configurations do not cascade, so all of the definition from
- ../pom.xml:build:plugin-management:plugins:plugin must be repeated in child poms -->
- <executions>
- <execution>
- <id>analyze</id>
- <goals>
- <goal>analyze-only</goal>
- </goals>
- <configuration>
- <failOnWarning>true</failOnWarning>
- <!-- ignore "unused but declared" warnings -->
- <ignoredUnusedDeclaredDependencies>
- <ignoredUnusedDeclaredDependency>io.dropwizard.metrics:metrics-core</ignoredUnusedDeclaredDependency>
- <ignoredUnusedDeclaredDependency>net.hydromatic:scott-data-hsqldb</ignoredUnusedDeclaredDependency>
- <ignoredUnusedDeclaredDependency>org.hsqldb:hsqldb</ignoredUnusedDeclaredDependency>
- <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-api</ignoredUnusedDeclaredDependency>
- <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-log4j12</ignoredUnusedDeclaredDependency>
- </ignoredUnusedDeclaredDependencies>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-</project>
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
----------------------------------------------------------------------
diff --git a/avatica/server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java b/avatica/server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
deleted file mode 100644
index 4756e8d..0000000
--- a/avatica/server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
+++ /dev/null
@@ -1,1101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.jdbc;
-
-import org.apache.calcite.avatica.AvaticaParameter;
-import org.apache.calcite.avatica.AvaticaPreparedStatement;
-import org.apache.calcite.avatica.AvaticaUtils;
-import org.apache.calcite.avatica.ColumnMetaData;
-import org.apache.calcite.avatica.ConnectionPropertiesImpl;
-import org.apache.calcite.avatica.Meta;
-import org.apache.calcite.avatica.MetaImpl;
-import org.apache.calcite.avatica.MissingResultsException;
-import org.apache.calcite.avatica.NoSuchConnectionException;
-import org.apache.calcite.avatica.NoSuchStatementException;
-import org.apache.calcite.avatica.QueryState;
-import org.apache.calcite.avatica.SqlType;
-import org.apache.calcite.avatica.metrics.Gauge;
-import org.apache.calcite.avatica.metrics.MetricsSystem;
-import org.apache.calcite.avatica.metrics.noop.NoopMetricsSystem;
-import org.apache.calcite.avatica.proto.Common;
-import org.apache.calcite.avatica.proto.Requests;
-import org.apache.calcite.avatica.remote.ProtobufMeta;
-import org.apache.calcite.avatica.remote.TypedValue;
-import org.apache.calcite.avatica.util.Unsafe;
-
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.RemovalListener;
-import com.google.common.cache.RemovalNotification;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.apache.calcite.avatica.remote.MetricsHelper.concat;
-
-import java.lang.reflect.InvocationTargetException;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.DriverManager;
-import java.sql.ParameterMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/** Implementation of {@link Meta} upon an existing JDBC data source. */
-public class JdbcMeta implements ProtobufMeta {
- private static final Logger LOG = LoggerFactory.getLogger(JdbcMeta.class);
-
- private static final String CONN_CACHE_KEY_BASE = "avatica.connectioncache";
-
- private static final String STMT_CACHE_KEY_BASE = "avatica.statementcache";
-
- /** Special value for {@code Statement#getLargeMaxRows()} that means fetch
- * an unlimited number of rows in a single batch.
- *
- * <p>Any other negative value will return an unlimited number of rows but
- * will do it in the default batch size, namely 100. */
- public static final int UNLIMITED_COUNT = -2;
-
- // End of constants, start of member variables
-
- final Calendar calendar = Unsafe.localCalendar();
-
- /** Generates ids for statements. The ids are unique across all connections
- * created by this JdbcMeta. */
- private final AtomicInteger statementIdGenerator = new AtomicInteger();
-
- private final String url;
- private final Properties info;
- private final Cache<String, Connection> connectionCache;
- private final Cache<Integer, StatementInfo> statementCache;
- private final MetricsSystem metrics;
-
- /**
- * Creates a JdbcMeta.
- *
- * @param url a database url of the form
- * <code>jdbc:<em>subprotocol</em>:<em>subname</em></code>
- */
- public JdbcMeta(String url) throws SQLException {
- this(url, new Properties());
- }
-
- /**
- * Creates a JdbcMeta.
- *
- * @param url a database url of the form
- * <code>jdbc:<em>subprotocol</em>:<em>subname</em></code>
- * @param user the database user on whose behalf the connection is being
- * made
- * @param password the user's password
- */
- public JdbcMeta(final String url, final String user, final String password)
- throws SQLException {
- this(url, new Properties() {
- {
- put("user", user);
- put("password", password);
- }
- });
- }
-
- public JdbcMeta(String url, Properties info) throws SQLException {
- this(url, info, NoopMetricsSystem.getInstance());
- }
-
- /**
- * Creates a JdbcMeta.
- *
- * @param url a database url of the form
- * <code> jdbc:<em>subprotocol</em>:<em>subname</em></code>
- * @param info a list of arbitrary string tag/value pairs as
- * connection arguments; normally at least a "user" and
- * "password" property should be included
- */
- public JdbcMeta(String url, Properties info, MetricsSystem metrics)
- throws SQLException {
- this.url = url;
- this.info = info;
- this.metrics = Objects.requireNonNull(metrics);
-
- int concurrencyLevel = Integer.parseInt(
- info.getProperty(ConnectionCacheSettings.CONCURRENCY_LEVEL.key(),
- ConnectionCacheSettings.CONCURRENCY_LEVEL.defaultValue()));
- int initialCapacity = Integer.parseInt(
- info.getProperty(ConnectionCacheSettings.INITIAL_CAPACITY.key(),
- ConnectionCacheSettings.INITIAL_CAPACITY.defaultValue()));
- long maxCapacity = Long.parseLong(
- info.getProperty(ConnectionCacheSettings.MAX_CAPACITY.key(),
- ConnectionCacheSettings.MAX_CAPACITY.defaultValue()));
- long connectionExpiryDuration = Long.parseLong(
- info.getProperty(ConnectionCacheSettings.EXPIRY_DURATION.key(),
- ConnectionCacheSettings.EXPIRY_DURATION.defaultValue()));
- TimeUnit connectionExpiryUnit = TimeUnit.valueOf(
- info.getProperty(ConnectionCacheSettings.EXPIRY_UNIT.key(),
- ConnectionCacheSettings.EXPIRY_UNIT.defaultValue()));
- this.connectionCache = CacheBuilder.newBuilder()
- .concurrencyLevel(concurrencyLevel)
- .initialCapacity(initialCapacity)
- .maximumSize(maxCapacity)
- .expireAfterAccess(connectionExpiryDuration, connectionExpiryUnit)
- .removalListener(new ConnectionExpiryHandler())
- .build();
- LOG.debug("instantiated connection cache: {}", connectionCache.stats());
-
- concurrencyLevel = Integer.parseInt(
- info.getProperty(StatementCacheSettings.CONCURRENCY_LEVEL.key(),
- StatementCacheSettings.CONCURRENCY_LEVEL.defaultValue()));
- initialCapacity = Integer.parseInt(
- info.getProperty(StatementCacheSettings.INITIAL_CAPACITY.key(),
- StatementCacheSettings.INITIAL_CAPACITY.defaultValue()));
- maxCapacity = Long.parseLong(
- info.getProperty(StatementCacheSettings.MAX_CAPACITY.key(),
- StatementCacheSettings.MAX_CAPACITY.defaultValue()));
- connectionExpiryDuration = Long.parseLong(
- info.getProperty(StatementCacheSettings.EXPIRY_DURATION.key(),
- StatementCacheSettings.EXPIRY_DURATION.defaultValue()));
- connectionExpiryUnit = TimeUnit.valueOf(
- info.getProperty(StatementCacheSettings.EXPIRY_UNIT.key(),
- StatementCacheSettings.EXPIRY_UNIT.defaultValue()));
- this.statementCache = CacheBuilder.newBuilder()
- .concurrencyLevel(concurrencyLevel)
- .initialCapacity(initialCapacity)
- .maximumSize(maxCapacity)
- .expireAfterAccess(connectionExpiryDuration, connectionExpiryUnit)
- .removalListener(new StatementExpiryHandler())
- .build();
-
- LOG.debug("instantiated statement cache: {}", statementCache.stats());
-
- // Register some metrics
- this.metrics.register(concat(JdbcMeta.class, "ConnectionCacheSize"), new Gauge<Long>() {
- @Override public Long getValue() {
- return connectionCache.size();
- }
- });
-
- this.metrics.register(concat(JdbcMeta.class, "StatementCacheSize"), new Gauge<Long>() {
- @Override public Long getValue() {
- return statementCache.size();
- }
- });
- }
-
- // For testing purposes
- protected AtomicInteger getStatementIdGenerator() {
- return statementIdGenerator;
- }
-
- // For testing purposes
- protected Cache<Integer, StatementInfo> getStatementCache() {
- return statementCache;
- }
-
- /**
- * Converts from JDBC metadata to Avatica columns.
- */
- protected static List<ColumnMetaData>
- columns(ResultSetMetaData metaData) throws SQLException {
- if (metaData == null) {
- return Collections.emptyList();
- }
- final List<ColumnMetaData> columns = new ArrayList<>();
- for (int i = 1; i <= metaData.getColumnCount(); i++) {
- final SqlType sqlType = SqlType.valueOf(metaData.getColumnType(i));
- final ColumnMetaData.Rep rep = ColumnMetaData.Rep.of(sqlType.internal);
- final ColumnMetaData.AvaticaType t;
- if (sqlType == SqlType.ARRAY || sqlType == SqlType.STRUCT || sqlType == SqlType.MULTISET) {
- ColumnMetaData.AvaticaType arrayValueType = ColumnMetaData.scalar(Types.JAVA_OBJECT,
- metaData.getColumnTypeName(i), ColumnMetaData.Rep.OBJECT);
- t = ColumnMetaData.array(arrayValueType, metaData.getColumnTypeName(i), rep);
- } else {
- t = ColumnMetaData.scalar(metaData.getColumnType(i), metaData.getColumnTypeName(i), rep);
- }
- ColumnMetaData md =
- new ColumnMetaData(i - 1, metaData.isAutoIncrement(i),
- metaData.isCaseSensitive(i), metaData.isSearchable(i),
- metaData.isCurrency(i), metaData.isNullable(i),
- metaData.isSigned(i), metaData.getColumnDisplaySize(i),
- metaData.getColumnLabel(i), metaData.getColumnName(i),
- metaData.getSchemaName(i), metaData.getPrecision(i),
- metaData.getScale(i), metaData.getTableName(i),
- metaData.getCatalogName(i), t, metaData.isReadOnly(i),
- metaData.isWritable(i), metaData.isDefinitelyWritable(i),
- metaData.getColumnClassName(i));
- columns.add(md);
- }
- return columns;
- }
-
- /**
- * Converts from JDBC metadata to Avatica parameters
- */
- protected static List<AvaticaParameter> parameters(ParameterMetaData metaData)
- throws SQLException {
- if (metaData == null) {
- return Collections.emptyList();
- }
- final List<AvaticaParameter> params = new ArrayList<>();
- for (int i = 1; i <= metaData.getParameterCount(); i++) {
- params.add(
- new AvaticaParameter(metaData.isSigned(i), metaData.getPrecision(i),
- metaData.getScale(i), metaData.getParameterType(i),
- metaData.getParameterTypeName(i),
- metaData.getParameterClassName(i), "?" + i));
- }
- return params;
- }
-
- protected static Signature signature(ResultSetMetaData metaData,
- ParameterMetaData parameterMetaData, String sql,
- Meta.StatementType statementType) throws SQLException {
- final CursorFactory cf = CursorFactory.LIST; // because JdbcResultSet#frame
- return new Signature(columns(metaData), sql, parameters(parameterMetaData),
- null, cf, statementType);
- }
-
- protected static Signature signature(ResultSetMetaData metaData)
- throws SQLException {
- return signature(metaData, null, null, null);
- }
-
- public Map<DatabaseProperty, Object> getDatabaseProperties(ConnectionHandle ch) {
- try {
- final Map<DatabaseProperty, Object> map = new HashMap<>();
- final Connection conn = getConnection(ch.id);
- final DatabaseMetaData metaData = conn.getMetaData();
- for (DatabaseProperty p : DatabaseProperty.values()) {
- addProperty(map, metaData, p);
- }
- return map;
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- private static Object addProperty(Map<DatabaseProperty, Object> map,
- DatabaseMetaData metaData, DatabaseProperty p) throws SQLException {
- Object propertyValue;
- if (p.isJdbc) {
- try {
- propertyValue = p.method.invoke(metaData);
- } catch (IllegalAccessException | InvocationTargetException e) {
- throw new RuntimeException(e);
- }
- } else {
- propertyValue = p.defaultValue;
- }
-
- return map.put(p, propertyValue);
- }
-
- public MetaResultSet getTables(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat tableNamePattern, List<String> typeList) {
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getTables(catalog, schemaPattern.s,
- tableNamePattern.s, toArray(typeList));
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Registers a StatementInfo for the given ResultSet, returning the id under
- * which it is registered. This should be used for metadata ResultSets, which
- * have an implicit statement created.
- */
- private int registerMetaStatement(ResultSet rs) throws SQLException {
- final int id = statementIdGenerator.getAndIncrement();
- StatementInfo statementInfo = new StatementInfo(rs.getStatement());
- statementInfo.setResultSet(rs);
- statementCache.put(id, statementInfo);
- return id;
- }
-
- public MetaResultSet getColumns(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat tableNamePattern, Pat columnNamePattern) {
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getColumns(catalog, schemaPattern.s,
- tableNamePattern.s, columnNamePattern.s);
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getSchemas(ConnectionHandle ch, String catalog, Pat schemaPattern) {
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getSchemas(catalog, schemaPattern.s);
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getCatalogs(ConnectionHandle ch) {
- try {
- final ResultSet rs = getConnection(ch.id).getMetaData().getCatalogs();
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getTableTypes(ConnectionHandle ch) {
- try {
- final ResultSet rs = getConnection(ch.id).getMetaData().getTableTypes();
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getProcedures(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat procedureNamePattern) {
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getProcedures(catalog, schemaPattern.s,
- procedureNamePattern.s);
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getProcedureColumns(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat procedureNamePattern, Pat columnNamePattern) {
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getProcedureColumns(catalog,
- schemaPattern.s, procedureNamePattern.s, columnNamePattern.s);
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getColumnPrivileges(ConnectionHandle ch, String catalog, String schema,
- String table, Pat columnNamePattern) {
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getColumnPrivileges(catalog, schema,
- table, columnNamePattern.s);
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getTablePrivileges(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat tableNamePattern) {
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getTablePrivileges(catalog,
- schemaPattern.s, tableNamePattern.s);
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getBestRowIdentifier(ConnectionHandle ch, String catalog, String schema,
- String table, int scope, boolean nullable) {
- LOG.trace("getBestRowIdentifier catalog:{} schema:{} table:{} scope:{} nullable:{}", catalog,
- schema, table, scope, nullable);
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getBestRowIdentifier(catalog, schema,
- table, scope, nullable);
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getVersionColumns(ConnectionHandle ch, String catalog, String schema,
- String table) {
- LOG.trace("getVersionColumns catalog:{} schema:{} table:{}", catalog, schema, table);
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getVersionColumns(catalog, schema, table);
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getPrimaryKeys(ConnectionHandle ch, String catalog, String schema,
- String table) {
- LOG.trace("getPrimaryKeys catalog:{} schema:{} table:{}", catalog, schema, table);
- try {
- final ResultSet rs =
- getConnection(ch.id).getMetaData().getPrimaryKeys(catalog, schema, table);
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getImportedKeys(ConnectionHandle ch, String catalog, String schema,
- String table) {
- return null;
- }
-
- public MetaResultSet getExportedKeys(ConnectionHandle ch, String catalog, String schema,
- String table) {
- return null;
- }
-
- public MetaResultSet getCrossReference(ConnectionHandle ch, String parentCatalog,
- String parentSchema, String parentTable, String foreignCatalog,
- String foreignSchema, String foreignTable) {
- return null;
- }
-
- public MetaResultSet getTypeInfo(ConnectionHandle ch) {
- try {
- final ResultSet rs = getConnection(ch.id).getMetaData().getTypeInfo();
- int stmtId = registerMetaStatement(rs);
- return JdbcResultSet.create(ch.id, stmtId, rs);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MetaResultSet getIndexInfo(ConnectionHandle ch, String catalog, String schema,
- String table, boolean unique, boolean approximate) {
- return null;
- }
-
- public MetaResultSet getUDTs(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat typeNamePattern, int[] types) {
- return null;
- }
-
- public MetaResultSet getSuperTypes(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat typeNamePattern) {
- return null;
- }
-
- public MetaResultSet getSuperTables(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat tableNamePattern) {
- return null;
- }
-
- public MetaResultSet getAttributes(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat typeNamePattern, Pat attributeNamePattern) {
- return null;
- }
-
- public MetaResultSet getClientInfoProperties(ConnectionHandle ch) {
- return null;
- }
-
- public MetaResultSet getFunctions(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat functionNamePattern) {
- return null;
- }
-
- public MetaResultSet getFunctionColumns(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat functionNamePattern, Pat columnNamePattern) {
- return null;
- }
-
- public MetaResultSet getPseudoColumns(ConnectionHandle ch, String catalog, Pat schemaPattern,
- Pat tableNamePattern, Pat columnNamePattern) {
- return null;
- }
-
- public Iterable<Object> createIterable(StatementHandle handle, QueryState state,
- Signature signature, List<TypedValue> parameterValues, Frame firstFrame) {
- return null;
- }
-
- protected Connection getConnection(String id) throws SQLException {
- if (id == null) {
- throw new NullPointerException("Connection id is null.");
- }
- Connection conn = connectionCache.getIfPresent(id);
- if (conn == null) {
- throw new NoSuchConnectionException("Connection not found: invalid id, closed, or expired: "
- + id);
- }
- return conn;
- }
-
- public StatementHandle createStatement(ConnectionHandle ch) {
- try {
- final Connection conn = getConnection(ch.id);
- final Statement statement = conn.createStatement();
- final int id = statementIdGenerator.getAndIncrement();
- statementCache.put(id, new StatementInfo(statement));
- StatementHandle h = new StatementHandle(ch.id, id, null);
- LOG.trace("created statement {}", h);
- return h;
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- @Override public void closeStatement(StatementHandle h) {
- StatementInfo info = statementCache.getIfPresent(h.id);
- if (info == null || info.statement == null) {
- LOG.debug("client requested close unknown statement {}", h);
- return;
- }
- LOG.trace("closing statement {}", h);
- try {
- ResultSet results = info.getResultSet();
- if (info.isResultSetInitialized() && null != results) {
- results.close();
- }
- info.statement.close();
- } catch (SQLException e) {
- throw propagate(e);
- } finally {
- statementCache.invalidate(h.id);
- }
- }
-
- @Override public void openConnection(ConnectionHandle ch,
- Map<String, String> info) {
- Properties fullInfo = new Properties();
- fullInfo.putAll(this.info);
- if (info != null) {
- fullInfo.putAll(info);
- }
-
- synchronized (this) {
- try {
- if (connectionCache.asMap().containsKey(ch.id)) {
- throw new RuntimeException("Connection already exists: " + ch.id);
- }
- Connection conn = DriverManager.getConnection(url, fullInfo);
- connectionCache.put(ch.id, conn);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
- }
-
- @Override public void closeConnection(ConnectionHandle ch) {
- Connection conn = connectionCache.getIfPresent(ch.id);
- if (conn == null) {
- LOG.debug("client requested close unknown connection {}", ch);
- return;
- }
- LOG.trace("closing connection {}", ch);
- try {
- conn.close();
- } catch (SQLException e) {
- throw propagate(e);
- } finally {
- connectionCache.invalidate(ch.id);
- }
- }
-
- protected void apply(Connection conn, ConnectionProperties connProps)
- throws SQLException {
- if (connProps.isAutoCommit() != null) {
- conn.setAutoCommit(connProps.isAutoCommit());
- }
- if (connProps.isReadOnly() != null) {
- conn.setReadOnly(connProps.isReadOnly());
- }
- if (connProps.getTransactionIsolation() != null) {
- conn.setTransactionIsolation(connProps.getTransactionIsolation());
- }
- if (connProps.getCatalog() != null) {
- conn.setCatalog(connProps.getCatalog());
- }
- if (connProps.getSchema() != null) {
- conn.setSchema(connProps.getSchema());
- }
- }
-
- @Override public ConnectionProperties connectionSync(ConnectionHandle ch,
- ConnectionProperties connProps) {
- LOG.trace("syncing properties for connection {}", ch);
- try {
- Connection conn = getConnection(ch.id);
- ConnectionPropertiesImpl props = new ConnectionPropertiesImpl(conn).merge(connProps);
- if (props.isDirty()) {
- apply(conn, props);
- props.setDirty(false);
- }
- return props;
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- RuntimeException propagate(Throwable e) {
- if (e instanceof RuntimeException) {
- throw (RuntimeException) e;
- } else if (e instanceof Error) {
- throw (Error) e;
- } else {
- throw new RuntimeException(e);
- }
- }
-
- public StatementHandle prepare(ConnectionHandle ch, String sql,
- long maxRowCount) {
- try {
- final Connection conn = getConnection(ch.id);
- final PreparedStatement statement = conn.prepareStatement(sql);
- final int id = getStatementIdGenerator().getAndIncrement();
- Meta.StatementType statementType = null;
- if (statement.isWrapperFor(AvaticaPreparedStatement.class)) {
- final AvaticaPreparedStatement avaticaPreparedStatement;
- avaticaPreparedStatement =
- statement.unwrap(AvaticaPreparedStatement.class);
- statementType = avaticaPreparedStatement.getStatementType();
- }
- // Set the maximum number of rows
- setMaxRows(statement, maxRowCount);
- getStatementCache().put(id, new StatementInfo(statement));
- StatementHandle h = new StatementHandle(ch.id, id,
- signature(statement.getMetaData(), statement.getParameterMetaData(),
- sql, statementType));
- LOG.trace("prepared statement {}", h);
- return h;
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- @SuppressWarnings("deprecation")
- public ExecuteResult prepareAndExecute(StatementHandle h, String sql,
- long maxRowCount, PrepareCallback callback) throws NoSuchStatementException {
- return prepareAndExecute(h, sql, maxRowCount, AvaticaUtils.toSaturatedInt(maxRowCount),
- callback);
- }
-
- public ExecuteResult prepareAndExecute(StatementHandle h, String sql, long maxRowCount,
- int maxRowsInFirstFrame, PrepareCallback callback) throws NoSuchStatementException {
- try {
- final StatementInfo info = getStatementCache().getIfPresent(h.id);
- if (info == null) {
- throw new NoSuchStatementException(h);
- }
- final Statement statement = info.statement;
- // Make sure that we limit the number of rows for the query
- setMaxRows(statement, maxRowCount);
- boolean ret = statement.execute(sql);
- info.setResultSet(statement.getResultSet());
- // Either execute(sql) returned true or the resultSet was null
- assert ret || null == info.getResultSet();
- final List<MetaResultSet> resultSets = new ArrayList<>();
- if (null == info.getResultSet()) {
- // Create a special result set that just carries update count
- resultSets.add(
- JdbcResultSet.count(h.connectionId, h.id,
- AvaticaUtils.getLargeUpdateCount(statement)));
- } else {
- resultSets.add(
- JdbcResultSet.create(h.connectionId, h.id, info.getResultSet(), maxRowsInFirstFrame));
- }
- LOG.trace("prepAndExec statement {}", h);
- // TODO: review client to ensure statementId is updated when appropriate
- return new ExecuteResult(resultSets);
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- /**
- * Sets the provided maximum number of rows on the given statement.
- *
- * @param statement The JDBC Statement to operate on
- * @param maxRowCount The maximum number of rows which should be returned for the query
- */
- void setMaxRows(Statement statement, long maxRowCount) throws SQLException {
- // Special handling of maxRowCount as JDBC 0 is unlimited, our meta 0 row
- if (maxRowCount > 0) {
- AvaticaUtils.setLargeMaxRows(statement, maxRowCount);
- } else if (maxRowCount < 0) {
- statement.setMaxRows(0);
- }
- }
-
- public boolean syncResults(StatementHandle sh, QueryState state, long offset)
- throws NoSuchStatementException {
- try {
- final Connection conn = getConnection(sh.connectionId);
- final StatementInfo info = statementCache.getIfPresent(sh.id);
- if (null == info) {
- throw new NoSuchStatementException(sh);
- }
- final Statement statement = info.statement;
- // Let the state recreate the necessary ResultSet on the Statement
- info.setResultSet(state.invoke(conn, statement));
-
- if (null != info.getResultSet()) {
- // If it is non-null, try to advance to the requested offset.
- return info.advanceResultSetToOffset(info.getResultSet(), offset);
- }
-
- // No results, nothing to do. Client can move on.
- return false;
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- public Frame fetch(StatementHandle h, long offset, int fetchMaxRowCount) throws
- NoSuchStatementException, MissingResultsException {
- LOG.trace("fetching {} offset:{} fetchMaxRowCount:{}", h, offset, fetchMaxRowCount);
- try {
- final StatementInfo statementInfo = statementCache.getIfPresent(h.id);
- if (null == statementInfo) {
- // Statement might have expired, or never existed on this server.
- throw new NoSuchStatementException(h);
- }
-
- if (!statementInfo.isResultSetInitialized()) {
- // The Statement exists, but the results are missing. Need to call syncResults(...)
- throw new MissingResultsException(h);
- }
- if (statementInfo.getResultSet() == null) {
- return Frame.EMPTY;
- } else {
- return JdbcResultSet.frame(statementInfo, statementInfo.getResultSet(), offset,
- fetchMaxRowCount, calendar);
- }
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- private static String[] toArray(List<String> typeList) {
- if (typeList == null) {
- return null;
- }
- return typeList.toArray(new String[typeList.size()]);
- }
-
- @SuppressWarnings("deprecation")
- @Override public ExecuteResult execute(StatementHandle h, List<TypedValue> parameterValues,
- long maxRowCount) throws NoSuchStatementException {
- return execute(h, parameterValues, AvaticaUtils.toSaturatedInt(maxRowCount));
- }
-
- @Override public ExecuteResult execute(StatementHandle h,
- List<TypedValue> parameterValues, int maxRowsInFirstFrame) throws NoSuchStatementException {
- try {
- if (MetaImpl.checkParameterValueHasNull(parameterValues)) {
- throw new SQLException("exception while executing query: unbound parameter");
- }
-
- final StatementInfo statementInfo = statementCache.getIfPresent(h.id);
- if (null == statementInfo) {
- throw new NoSuchStatementException(h);
- }
- final List<MetaResultSet> resultSets;
- final PreparedStatement preparedStatement =
- (PreparedStatement) statementInfo.statement;
-
- if (parameterValues != null) {
- for (int i = 0; i < parameterValues.size(); i++) {
- TypedValue o = parameterValues.get(i);
- preparedStatement.setObject(i + 1, o.toJdbc(calendar));
- }
- }
-
- if (preparedStatement.execute()) {
- final Meta.Frame frame;
- final Signature signature2;
- if (preparedStatement.isWrapperFor(AvaticaPreparedStatement.class)) {
- signature2 = h.signature;
- } else {
- h.signature = signature(preparedStatement.getMetaData(),
- preparedStatement.getParameterMetaData(), h.signature.sql,
- Meta.StatementType.SELECT);
- signature2 = h.signature;
- }
-
- // Make sure we set this for subsequent fetch()'s to find the result set.
- statementInfo.setResultSet(preparedStatement.getResultSet());
-
- if (statementInfo.getResultSet() == null) {
- frame = Frame.EMPTY;
- resultSets = Collections.<MetaResultSet>singletonList(
- JdbcResultSet.empty(h.connectionId, h.id, signature2));
- } else {
- resultSets = Collections.<MetaResultSet>singletonList(
- JdbcResultSet.create(h.connectionId, h.id, statementInfo.getResultSet(),
- maxRowsInFirstFrame, signature2));
- }
- } else {
- resultSets = Collections.<MetaResultSet>singletonList(
- JdbcResultSet.count(h.connectionId, h.id, preparedStatement.getUpdateCount()));
- }
-
- return new ExecuteResult(resultSets);
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- @Override public void commit(ConnectionHandle ch) {
- try {
- final Connection conn = getConnection(ch.id);
- conn.commit();
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- @Override public void rollback(ConnectionHandle ch) {
- try {
- final Connection conn = getConnection(ch.id);
- conn.rollback();
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- @Override public ExecuteBatchResult prepareAndExecuteBatch(StatementHandle h,
- List<String> sqlCommands) throws NoSuchStatementException {
- try {
- // Get the statement
- final StatementInfo info = statementCache.getIfPresent(h.id);
- if (info == null) {
- throw new NoSuchStatementException(h);
- }
-
- // addBatch() for each sql command
- final Statement stmt = info.statement;
- for (String sqlCommand : sqlCommands) {
- stmt.addBatch(sqlCommand);
- }
-
- // Execute the batch and return the results
- return new ExecuteBatchResult(AvaticaUtils.executeLargeBatch(stmt));
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- @Override public ExecuteBatchResult executeBatch(StatementHandle h,
- List<List<TypedValue>> updateBatches) throws NoSuchStatementException {
- try {
- final StatementInfo info = statementCache.getIfPresent(h.id);
- if (null == info) {
- throw new NoSuchStatementException(h);
- }
-
- final PreparedStatement preparedStmt = (PreparedStatement) info.statement;
- int rowUpdate = 1;
- for (List<TypedValue> batch : updateBatches) {
- int i = 1;
- for (TypedValue value : batch) {
- // Set the TypedValue in the PreparedStatement
- try {
- preparedStmt.setObject(i, value.toJdbc(calendar));
- i++;
- } catch (SQLException e) {
- throw new RuntimeException("Failed to set value on row #" + rowUpdate
- + " and column #" + i, e);
- }
- // Track the update number for better error messages
- rowUpdate++;
- }
- preparedStmt.addBatch();
- }
- return new ExecuteBatchResult(AvaticaUtils.executeLargeBatch(preparedStmt));
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- @Override public ExecuteBatchResult executeBatchProtobuf(StatementHandle h,
- List<Requests.UpdateBatch> updateBatches) throws NoSuchStatementException {
- try {
- final StatementInfo info = statementCache.getIfPresent(h.id);
- if (null == info) {
- throw new NoSuchStatementException(h);
- }
-
- final PreparedStatement preparedStmt = (PreparedStatement) info.statement;
- for (Requests.UpdateBatch update : updateBatches) {
- int i = 1;
- for (Common.TypedValue value : update.getParameterValuesList()) {
- // Use the value and then increment
- preparedStmt.setObject(i++, TypedValue.protoToJdbc(value, calendar));
- }
- preparedStmt.addBatch();
- }
- return new ExecuteBatchResult(AvaticaUtils.executeLargeBatch(preparedStmt));
- } catch (SQLException e) {
- throw propagate(e);
- }
- }
-
- /** Configurable statement cache settings. */
- public enum StatementCacheSettings {
- /** JDBC connection property for setting connection cache concurrency level. */
- CONCURRENCY_LEVEL(STMT_CACHE_KEY_BASE + ".concurrency", "100"),
-
- /** JDBC connection property for setting connection cache initial capacity. */
- INITIAL_CAPACITY(STMT_CACHE_KEY_BASE + ".initialcapacity", "1000"),
-
- /** JDBC connection property for setting connection cache maximum capacity. */
- MAX_CAPACITY(STMT_CACHE_KEY_BASE + ".maxcapacity", "10000"),
-
- /** JDBC connection property for setting connection cache expiration duration.
- *
- * <p>Used in conjunction with {@link #EXPIRY_UNIT}.</p>
- */
- EXPIRY_DURATION(STMT_CACHE_KEY_BASE + ".expirydiration", "5"),
-
- /** JDBC connection property for setting connection cache expiration unit.
- *
- * <p>Used in conjunction with {@link #EXPIRY_DURATION}.</p>
- */
- EXPIRY_UNIT(STMT_CACHE_KEY_BASE + ".expiryunit", TimeUnit.MINUTES.name());
-
- private final String key;
- private final String defaultValue;
-
- StatementCacheSettings(String key, String defaultValue) {
- this.key = key;
- this.defaultValue = defaultValue;
- }
-
- /** The configuration key for specifying this setting. */
- public String key() {
- return key;
- }
-
- /** The default value for this setting. */
- public String defaultValue() {
- return defaultValue;
- }
- }
-
- /** Configurable connection cache settings. */
- public enum ConnectionCacheSettings {
- /** JDBC connection property for setting connection cache concurrency level. */
- CONCURRENCY_LEVEL(CONN_CACHE_KEY_BASE + ".concurrency", "10"),
-
- /** JDBC connection property for setting connection cache initial capacity. */
- INITIAL_CAPACITY(CONN_CACHE_KEY_BASE + ".initialcapacity", "100"),
-
- /** JDBC connection property for setting connection cache maximum capacity. */
- MAX_CAPACITY(CONN_CACHE_KEY_BASE + ".maxcapacity", "1000"),
-
- /** JDBC connection property for setting connection cache expiration duration. */
- EXPIRY_DURATION(CONN_CACHE_KEY_BASE + ".expiryduration", "10"),
-
- /** JDBC connection property for setting connection cache expiration unit. */
- EXPIRY_UNIT(CONN_CACHE_KEY_BASE + ".expiryunit", TimeUnit.MINUTES.name());
-
- private final String key;
- private final String defaultValue;
-
- ConnectionCacheSettings(String key, String defaultValue) {
- this.key = key;
- this.defaultValue = defaultValue;
- }
-
- /** The configuration key for specifying this setting. */
- public String key() {
- return key;
- }
-
- /** The default value for this setting. */
- public String defaultValue() {
- return defaultValue;
- }
- }
-
- /** Callback for {@link #connectionCache} member expiration. */
- private class ConnectionExpiryHandler
- implements RemovalListener<String, Connection> {
-
- public void onRemoval(RemovalNotification<String, Connection> notification) {
- String connectionId = notification.getKey();
- Connection doomed = notification.getValue();
- LOG.debug("Expiring connection {} because {}", connectionId, notification.getCause());
- try {
- if (doomed != null) {
- doomed.close();
- }
- } catch (Throwable t) {
- LOG.info("Exception thrown while expiring connection {}", connectionId, t);
- }
- }
- }
-
- /** Callback for {@link #statementCache} member expiration. */
- private class StatementExpiryHandler
- implements RemovalListener<Integer, StatementInfo> {
- public void onRemoval(RemovalNotification<Integer, StatementInfo> notification) {
- Integer stmtId = notification.getKey();
- StatementInfo doomed = notification.getValue();
- if (doomed == null) {
- // log/throw?
- return;
- }
- LOG.debug("Expiring statement {} because {}", stmtId, notification.getCause());
- try {
- if (doomed.getResultSet() != null) {
- doomed.getResultSet().close();
- }
- if (doomed.statement != null) {
- doomed.statement.close();
- }
- } catch (Throwable t) {
- LOG.info("Exception thrown while expiring statement {}", stmtId, t);
- }
- }
- }
-}
-
-// End JdbcMeta.java