Skip to content

Commit 4ce48d6

Browse files
authored
Merge pull request #5 from schemacrawler/hana
Create SQP HANA plugin
2 parents 87624ad + b70fd04 commit 4ce48d6

File tree

19 files changed

+628
-30
lines changed

19 files changed

+628
-30
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@
2020
<modules>
2121
<module>schemacrawler-sapiq</module>
2222
<module>schemacrawler-timesten</module>
23+
<module>schemacrawler-hana</module>
2324
</modules>
2425
</project>

schemacrawler-hana/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
target/
2+

schemacrawler-hana/LICENSE

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
Eclipse Public License - v 1.0
2+
3+
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
4+
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
5+
CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
6+
7+
1. DEFINITIONS
8+
9+
"Contribution" means:
10+
11+
a) in the case of the initial Contributor, the initial code and documentation
12+
distributed under this Agreement, and
13+
b) in the case of each subsequent Contributor:
14+
i) changes to the Program, and
15+
ii) additions to the Program;
16+
17+
where such changes and/or additions to the Program originate from and are
18+
distributed by that particular Contributor. A Contribution 'originates'
19+
from a Contributor if it was added to the Program by such Contributor
20+
itself or anyone acting on such Contributor's behalf. Contributions do not
21+
include additions to the Program which: (i) are separate modules of
22+
software distributed in conjunction with the Program under their own
23+
license agreement, and (ii) are not derivative works of the Program.
24+
25+
"Contributor" means any person or entity that distributes the Program.
26+
27+
"Licensed Patents" mean patent claims licensable by a Contributor which are
28+
necessarily infringed by the use or sale of its Contribution alone or when
29+
combined with the Program.
30+
31+
"Program" means the Contributions distributed in accordance with this
32+
Agreement.
33+
34+
"Recipient" means anyone who receives the Program under this Agreement,
35+
including all Contributors.
36+
37+
2. GRANT OF RIGHTS
38+
a) Subject to the terms of this Agreement, each Contributor hereby grants
39+
Recipient a non-exclusive, worldwide, royalty-free copyright license to
40+
reproduce, prepare derivative works of, publicly display, publicly
41+
perform, distribute and sublicense the Contribution of such Contributor,
42+
if any, and such derivative works, in source code and object code form.
43+
b) Subject to the terms of this Agreement, each Contributor hereby grants
44+
Recipient a non-exclusive, worldwide, royalty-free patent license under
45+
Licensed Patents to make, use, sell, offer to sell, import and otherwise
46+
transfer the Contribution of such Contributor, if any, in source code and
47+
object code form. This patent license shall apply to the combination of
48+
the Contribution and the Program if, at the time the Contribution is
49+
added by the Contributor, such addition of the Contribution causes such
50+
combination to be covered by the Licensed Patents. The patent license
51+
shall not apply to any other combinations which include the Contribution.
52+
No hardware per se is licensed hereunder.
53+
c) Recipient understands that although each Contributor grants the licenses
54+
to its Contributions set forth herein, no assurances are provided by any
55+
Contributor that the Program does not infringe the patent or other
56+
intellectual property rights of any other entity. Each Contributor
57+
disclaims any liability to Recipient for claims brought by any other
58+
entity based on infringement of intellectual property rights or
59+
otherwise. As a condition to exercising the rights and licenses granted
60+
hereunder, each Recipient hereby assumes sole responsibility to secure
61+
any other intellectual property rights needed, if any. For example, if a
62+
third party patent license is required to allow Recipient to distribute
63+
the Program, it is Recipient's responsibility to acquire that license
64+
before distributing the Program.
65+
d) Each Contributor represents that to its knowledge it has sufficient
66+
copyright rights in its Contribution, if any, to grant the copyright
67+
license set forth in this Agreement.
68+
69+
3. REQUIREMENTS
70+
71+
A Contributor may choose to distribute the Program in object code form under
72+
its own license agreement, provided that:
73+
74+
a) it complies with the terms and conditions of this Agreement; and
75+
b) its license agreement:
76+
i) effectively disclaims on behalf of all Contributors all warranties
77+
and conditions, express and implied, including warranties or
78+
conditions of title and non-infringement, and implied warranties or
79+
conditions of merchantability and fitness for a particular purpose;
80+
ii) effectively excludes on behalf of all Contributors all liability for
81+
damages, including direct, indirect, special, incidental and
82+
consequential damages, such as lost profits;
83+
iii) states that any provisions which differ from this Agreement are
84+
offered by that Contributor alone and not by any other party; and
85+
iv) states that source code for the Program is available from such
86+
Contributor, and informs licensees how to obtain it in a reasonable
87+
manner on or through a medium customarily used for software exchange.
88+
89+
When the Program is made available in source code form:
90+
91+
a) it must be made available under this Agreement; and
92+
b) a copy of this Agreement must be included with each copy of the Program.
93+
Contributors may not remove or alter any copyright notices contained
94+
within the Program.
95+
96+
Each Contributor must identify itself as the originator of its Contribution,
97+
if
98+
any, in a manner that reasonably allows subsequent Recipients to identify the
99+
originator of the Contribution.
100+
101+
4. COMMERCIAL DISTRIBUTION
102+
103+
Commercial distributors of software may accept certain responsibilities with
104+
respect to end users, business partners and the like. While this license is
105+
intended to facilitate the commercial use of the Program, the Contributor who
106+
includes the Program in a commercial product offering should do so in a manner
107+
which does not create potential liability for other Contributors. Therefore,
108+
if a Contributor includes the Program in a commercial product offering, such
109+
Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
110+
every other Contributor ("Indemnified Contributor") against any losses,
111+
damages and costs (collectively "Losses") arising from claims, lawsuits and
112+
other legal actions brought by a third party against the Indemnified
113+
Contributor to the extent caused by the acts or omissions of such Commercial
114+
Contributor in connection with its distribution of the Program in a commercial
115+
product offering. The obligations in this section do not apply to any claims
116+
or Losses relating to any actual or alleged intellectual property
117+
infringement. In order to qualify, an Indemnified Contributor must:
118+
a) promptly notify the Commercial Contributor in writing of such claim, and
119+
b) allow the Commercial Contributor to control, and cooperate with the
120+
Commercial Contributor in, the defense and any related settlement
121+
negotiations. The Indemnified Contributor may participate in any such claim at
122+
its own expense.
123+
124+
For example, a Contributor might include the Program in a commercial product
125+
offering, Product X. That Contributor is then a Commercial Contributor. If
126+
that Commercial Contributor then makes performance claims, or offers
127+
warranties related to Product X, those performance claims and warranties are
128+
such Commercial Contributor's responsibility alone. Under this section, the
129+
Commercial Contributor would have to defend claims against the other
130+
Contributors related to those performance claims and warranties, and if a
131+
court requires any other Contributor to pay any damages as a result, the
132+
Commercial Contributor must pay those damages.
133+
134+
5. NO WARRANTY
135+
136+
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
137+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
138+
IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
139+
NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
140+
Recipient is solely responsible for determining the appropriateness of using
141+
and distributing the Program and assumes all risks associated with its
142+
exercise of rights under this Agreement , including but not limited to the
143+
risks and costs of program errors, compliance with applicable laws, damage to
144+
or loss of data, programs or equipment, and unavailability or interruption of
145+
operations.
146+
147+
6. DISCLAIMER OF LIABILITY
148+
149+
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
150+
CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
151+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
152+
LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
153+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
154+
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
155+
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
156+
OF SUCH DAMAGES.
157+
158+
7. GENERAL
159+
160+
If any provision of this Agreement is invalid or unenforceable under
161+
applicable law, it shall not affect the validity or enforceability of the
162+
remainder of the terms of this Agreement, and without further action by the
163+
parties hereto, such provision shall be reformed to the minimum extent
164+
necessary to make such provision valid and enforceable.
165+
166+
If Recipient institutes patent litigation against any entity (including a
167+
cross-claim or counterclaim in a lawsuit) alleging that the Program itself
168+
(excluding combinations of the Program with other software or hardware)
169+
infringes such Recipient's patent(s), then such Recipient's rights granted
170+
under Section 2(b) shall terminate as of the date such litigation is filed.
171+
172+
All Recipient's rights under this Agreement shall terminate if it fails to
173+
comply with any of the material terms or conditions of this Agreement and does
174+
not cure such failure in a reasonable period of time after becoming aware of
175+
such noncompliance. If all Recipient's rights under this Agreement terminate,
176+
Recipient agrees to cease use and distribution of the Program as soon as
177+
reasonably practicable. However, Recipient's obligations under this Agreement
178+
and any licenses granted by Recipient relating to the Program shall continue
179+
and survive.
180+
181+
Everyone is permitted to copy and distribute copies of this Agreement, but in
182+
order to avoid inconsistency the Agreement is copyrighted and may only be
183+
modified in the following manner. The Agreement Steward reserves the right to
184+
publish new versions (including revisions) of this Agreement from time to
185+
time. No one other than the Agreement Steward has the right to modify this
186+
Agreement. The Eclipse Foundation is the initial Agreement Steward. The
187+
Eclipse Foundation may assign the responsibility to serve as the Agreement
188+
Steward to a suitable separate entity. Each new version of the Agreement will
189+
be given a distinguishing version number. The Program (including
190+
Contributions) may always be distributed subject to the version of the
191+
Agreement under which it was received. In addition, after a new version of the
192+
Agreement is published, Contributor may elect to distribute the Program
193+
(including its Contributions) under the new version. Except as expressly
194+
stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
195+
licenses to the intellectual property of any Contributor under this Agreement,
196+
whether expressly, by implication, estoppel or otherwise. All rights in the
197+
Program not expressly granted under this Agreement are reserved.
198+
199+
This Agreement is governed by the laws of the State of New York and the
200+
intellectual property laws of the United States of America. No party to this
201+
Agreement will bring a legal action under this Agreement more than one year
202+
after the cause of action arose. Each party waives its rights to a jury trial in
203+
any resulting litigation.

schemacrawler-hana/pom.xml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xmlns="http://maven.apache.org/POM/4.0.0"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>us.fatehi</groupId>
8+
<artifactId>schemacrawler-parent</artifactId>
9+
<version>16.11.1</version>
10+
</parent>
11+
<artifactId>schemacrawler-hana</artifactId>
12+
<packaging>jar</packaging>
13+
<name>SchemaCrawler for SAP HANA</name>
14+
<dependencies>
15+
<dependency>
16+
<groupId>us.fatehi</groupId>
17+
<artifactId>schemacrawler</artifactId>
18+
<version>${project.version}</version>
19+
</dependency>
20+
<dependency>
21+
<groupId>us.fatehi</groupId>
22+
<artifactId>schemacrawler-commandline</artifactId>
23+
<version>${project.version}</version>
24+
</dependency>
25+
26+
<dependency>
27+
<groupId>us.fatehi</groupId>
28+
<artifactId>schemacrawler-api</artifactId>
29+
<version>${project.version}</version>
30+
<type>test-jar</type>
31+
<scope>test</scope>
32+
</dependency>
33+
34+
<dependency>
35+
<groupId>com.sap.cloud.db.jdbc</groupId>
36+
<artifactId>ngdbc</artifactId>
37+
<version>2.6.29</version>
38+
</dependency>
39+
</dependencies>
40+
<build>
41+
<plugins>
42+
<plugin>
43+
<groupId>org.apache.maven.plugins</groupId>
44+
<artifactId>maven-jar-plugin</artifactId>
45+
<configuration>
46+
<archive>
47+
<index>true</index>
48+
<manifestEntries>
49+
<Project>${project.name}, ${project.version}</Project>
50+
<Author>Sualeh Fatehi, sualeh@hotmail.com</Author>
51+
</manifestEntries>
52+
</archive>
53+
</configuration>
54+
</plugin>
55+
<plugin>
56+
<groupId>org.apache.maven.plugins</groupId>
57+
<artifactId>maven-deploy-plugin</artifactId>
58+
<configuration>
59+
<skip>false</skip>
60+
</configuration>
61+
</plugin>
62+
</plugins>
63+
</build>
64+
</project>
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
========================================================================
3+
SchemaCrawler
4+
http://www.schemacrawler.com
5+
Copyright (c) 2000-2020, Sualeh Fatehi <sualeh@hotmail.com>.
6+
All rights reserved.
7+
------------------------------------------------------------------------
8+
9+
SchemaCrawler is distributed in the hope that it will be useful, but
10+
WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
13+
SchemaCrawler and the accompanying materials are made available under
14+
the terms of the Eclipse Public License v1.0, GNU General Public License
15+
v3 or GNU Lesser General Public License v3.
16+
17+
You may elect to redistribute this code under any of these licenses.
18+
19+
The Eclipse Public License is available at:
20+
http://www.eclipse.org/legal/epl-v10.html
21+
22+
The GNU General Public License v3 and the GNU Lesser General Public
23+
License v3 are available at:
24+
http://www.gnu.org/licenses/
25+
26+
========================================================================
27+
*/
28+
29+
package schemacrawler.tools.hana;
30+
31+
import java.io.IOException;
32+
import java.util.logging.Level;
33+
import java.util.logging.Logger;
34+
35+
import schemacrawler.schemacrawler.DatabaseServerType;
36+
import schemacrawler.tools.databaseconnector.DatabaseConnectionUrlBuilder;
37+
import schemacrawler.tools.databaseconnector.DatabaseConnector;
38+
import schemacrawler.tools.executable.commandline.PluginCommand;
39+
40+
public final class HanaDatabaseConnector extends DatabaseConnector {
41+
42+
private static final Logger LOGGER = Logger.getLogger(HanaDatabaseConnector.class.getName());
43+
44+
public HanaDatabaseConnector() throws IOException {
45+
super(
46+
new DatabaseServerType("hana", "SAP HANA"),
47+
url -> url != null && url.startsWith("jdbc:sap:"),
48+
(informationSchemaViewsBuilder, connection) ->
49+
informationSchemaViewsBuilder.fromResourceFolder("/hana.information_schema"),
50+
(schemaRetrievalOptionsBuilder, connection) -> {},
51+
(limitOptionsBuilder) -> {},
52+
() ->
53+
DatabaseConnectionUrlBuilder.builder(
54+
"jdbc:sap://${host}:${port}/?databaseName=${database}")
55+
.withDefaultPort(30015));
56+
LOGGER.log(Level.INFO, "Loaded commandline for SAP HANA");
57+
}
58+
59+
@Override
60+
public PluginCommand getHelpCommand() {
61+
final PluginCommand pluginCommand = super.getHelpCommand();
62+
pluginCommand
63+
.addOption(
64+
"server", String.class, "--server=hana%n" + "Loads SchemaCrawler plug-in for SAP HANA")
65+
.addOption("host", String.class, "Host name%n" + "Optional, defaults to localhost")
66+
.addOption("port", Integer.class, "Port number%n" + "Optional, defaults to 30015")
67+
.addOption("database", String.class, "Database name");
68+
return pluginCommand;
69+
}
70+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
schemacrawler.tools.hana.HanaDatabaseConnector
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
SELECT
2+
NULL AS TABLE_CATALOG,
3+
TABLES.SCHEMA_NAME AS TABLE_SCHEMA,
4+
TABLES.TABLE_NAME,
5+
TABLES.*
6+
FROM
7+
SYS.TABLES
8+
ORDER BY
9+
TABLES.SCHEMA_NAME,
10+
TABLES.TABLE_NAME
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
SELECT
2+
NULL AS CONSTRAINT_CATALOG,
3+
CONSTRAINTS.SCHEMA_NAME AS CONSTRAINT_SCHEMA,
4+
CONSTRAINTS.TABLE_NAME,
5+
CONSTRAINTS.CONSTRAINT_NAME,
6+
CONSTRAINTS.CHECK_CONDITION CHECK_CLAUSE
7+
FROM
8+
SYS.CONSTRAINTS
9+
WHERE
10+
IS_PRIMARY_KEY = 'FALSE'
11+
AND IS_UNIQUE_KEY = 'FALSE'
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
SELECT
2+
USERS.USER_NAME AS USERNAME,
3+
USERS.*
4+
FROM
5+
SYS.USERS
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
SELECT
2+
NULL AS SYNONYM_CATALOG,
3+
SYNONYMS.SCHEMA_NAME AS SYNONYM_SCHEMA,
4+
SYNONYMS.SYNONYM_NAME,
5+
NULL AS REFERENCED_OBJECT_CATALOG,
6+
SYNONYMS.OBJECT_SCHEMA AS REFERENCED_OBJECT_SCHEMA,
7+
SYNONYMS.OBJECT_NAME AS REFERENCED_OBJECT_NAME
8+
FROM
9+
SYS.SYNONYMS
10+
ORDER BY
11+
SYNONYMS.SCHEMA_NAME,
12+
SYNONYMS.SYNONYM_NAME

0 commit comments

Comments
 (0)