Repository: incubator-trafodion Updated Branches: refs/heads/master 72b9ec456 -> cad7ab693
initialize spj Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/84f4ccdc Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/84f4ccdc Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/84f4ccdc Branch: refs/heads/master Commit: 84f4ccdc2d71049cd91cb934392a27ce5a849f63 Parents: e54c732 Author: Kevin Xu <[email protected]> Authored: Thu Dec 3 16:47:06 2015 +0800 Committer: Kevin Xu <[email protected]> Committed: Thu Dec 3 16:47:06 2015 +0800 ---------------------------------------------------------------------- core/conn/spj_init/Makefile | 37 ++ core/conn/spj_init/README.md | 24 + core/conn/spj_init/pom.xml | 68 +++ .../main/java/com/traf/mgmt/JarFileMgmt.java | 435 +++++++++++++++++++ .../spj_init/src/main/resources/init_spj.sql | 156 +++++++ .../com/trafodion/mgmt/JarFileMgmtTest.java | 27 ++ 6 files changed, 747 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/84f4ccdc/core/conn/spj_init/Makefile ---------------------------------------------------------------------- diff --git a/core/conn/spj_init/Makefile b/core/conn/spj_init/Makefile new file mode 100644 index 0000000..698fbf2 --- /dev/null +++ b/core/conn/spj_init/Makefile @@ -0,0 +1,37 @@ +# @@@ START COPYRIGHT @@@ +# +# 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. +# +# @@@ END COPYRIGHT @@@ + +LIBDIR := lib +JAVAC := $(JAVA_HOME)/bin/javac +INSTALL_LIBDIR := ${MY_SQROOT}/export/lib +INSTALL_SCRIPTSDIR := ${MY_SQROOT}/sql/scripts +CP :=/bin/cp -f +INSTALL_INCLUDEDIR := ${MY_SQROOT}/export/include +all: + @$(MAVEN) package + ${CP} target/spj_init-*.jar ${INSTALL_LIBDIR}/spj_init.jar + ${CP} src/main/resources/init_spj.sql ${INSTALL_SCRIPTSDIR}/ + @chmod +x ${INSTALL_SCRIPTSDIR}/init_spj.sql +clean: + @rm ${INSTALL_LIBDIR}/spj_init.jar + @rm -f ${INSTALL_SCRIPTSDIR}/init_spj.sql + @$(MAVEN) clean +cleanall: clean http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/84f4ccdc/core/conn/spj_init/README.md ---------------------------------------------------------------------- diff --git a/core/conn/spj_init/README.md b/core/conn/spj_init/README.md new file mode 100644 index 0000000..7228a65 --- /dev/null +++ b/core/conn/spj_init/README.md @@ -0,0 +1,24 @@ +##How to build and initialize default SPJs +###Build +``` +cd $MY_SQROOT/../conn/spj_init +make clean && make all +``` +###Initialization +``` +cds +./init_spj.sql +``` +###SPJ Example +``` +DEFAULT_SPJ.HELP(INOUT COMMANDNAME VARCHAR) +E.g. +trafci>set param ?p1 help; +trafci>call DEFAULT_SPJ.HELP(?p1) +PUT - Upload a JAR. SHOWDDL PRODURE DEFAULT_SPJ.PUT for more info. +LS - List JARs. SHOWDDL PRODURE DEFAULT_SPJ.LS for more info. +LSALL - List all JARs. SHOWDDL PRODURE DEFAULT_SPJ.LSALL for more info. +RM - Remove a JAR. SHOWDDL PRODURE DEFAULT_SPJ.RM for more info. +RMREX - Remove JARs by a perticular pattern. SHOWDDL PRODURE DEFAULT_SPJ.RMREX for more info. +GETFILE - Upload a JAR. SHOWDDL PRODURE DEFAULT_SPJ.GETFILE for more info. +``` http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/84f4ccdc/core/conn/spj_init/pom.xml ---------------------------------------------------------------------- diff --git a/core/conn/spj_init/pom.xml b/core/conn/spj_init/pom.xml new file mode 100644 index 0000000..0d898ec --- /dev/null +++ b/core/conn/spj_init/pom.xml @@ -0,0 +1,68 @@ +<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"> + <!-- + * @@@ START COPYRIGHT @@@ + * + * 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. + * + * @@@ END COPYRIGHT @@@ + --> + <modelVersion>4.0.0</modelVersion> + <groupId>org.trafodion</groupId> + <artifactId>spj_init</artifactId> + <version>${env.TRAFODION_VER}</version> + <dependencies> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>1.7.12</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.xerial.snappy</groupId> + <artifactId>snappy-java</artifactId> + <version>1.1.2</version> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-assembly-plugin</artifactId> + <version>2.3</version> + <configuration> + <appendAssemblyId>false</appendAssemblyId> + <descriptorRefs> + <descriptorRef>jar-with-dependencies</descriptorRef> + </descriptorRefs> + </configuration> + <executions> + <execution> + <id>make-assembly</id> + <phase>package</phase> + <goals> + <goal>assembly</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/84f4ccdc/core/conn/spj_init/src/main/java/com/traf/mgmt/JarFileMgmt.java ---------------------------------------------------------------------- diff --git a/core/conn/spj_init/src/main/java/com/traf/mgmt/JarFileMgmt.java b/core/conn/spj_init/src/main/java/com/traf/mgmt/JarFileMgmt.java new file mode 100644 index 0000000..90caa8c --- /dev/null +++ b/core/conn/spj_init/src/main/java/com/traf/mgmt/JarFileMgmt.java @@ -0,0 +1,435 @@ +/** +* @@@ START COPYRIGHT @@@ +* +* 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. +* +* @@@ END COPYRIGHT @@@ + */ +package com.traf.mgmt; + +import java.io.File; +import java.io.FileFilter; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.xerial.snappy.Snappy; + +public class JarFileMgmt { + private static final Logger LOG = LoggerFactory.getLogger(JarFileMgmt.class); + private static final String url = "jdbc:default:connection"; + // 100Mb + private static final long MAX_JAR_FILE_SIZE = 104857600; + private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final int MaxDataSize = 102400; + private static final String CHARTSET = "ISO-8859-1"; + + /** + * Print help info + * + * @param helps: + * INOUT parameter like PUT/LS/... + */ + public static void help(String[] helps) { + String[] help = new String[] { + "PUT - Upload a JAR. SHOWDDL PROCEDURE DEFAULT_SPJ.PUT for more info.", + "LS - List JARs. SHOWDDL PROCEDURE DEFAULT_SPJ.LS for more info.", + "LSALL - List all JARs. SHOWDDL PROCEDURE DEFAULT_SPJ.LSALL for more info.", + "RM - Remove a JAR. SHOWDDL PROCEDURE DEFAULT_SPJ.RM for more info.", + "RMREX - Remove JARs by a perticular pattern. SHOWDDL PROCEDURE DEFAULT_SPJ.RMREX for more info.", + "GETFILE - Download a JAR. SHOWDDL PROCEDURE DEFAULT_SPJ.GETFILE for more info." + }; + List<String> index = new ArrayList<String>(help.length); + index.add("PUT"); + index.add("LS"); + index.add("LSALL"); + index.add("RM"); + index.add("RMREX"); + index.add("GETFILE"); + String tmp = helps[0].trim().toUpperCase(); + helps[0] = "HELP:\r\n"; + switch (index.indexOf(tmp)) { + case 0: + helps[0] = help[0]; + break; + case 1: + helps[0] = help[1]; + break; + case 2: + helps[0] = help[2]; + break; + case 3: + helps[0] = help[3]; + break; + case 4: + helps[0] = help[4]; + break; + case 5: + helps[0] = help[5]; + break; + default: + for (String h : help) { + helps[0] += h + "\r\n"; + } + + } + + } + + public static void syncJar(String userPath, String fileName) throws SQLException, IOException { + checkFileName(fileName); + LOG.info("syncJars " + fileName); + String nodes = System.getenv("MY_NODES"); + if (nodes != null && !"".equals(nodes.trim())) { + execShell("pdcp " + nodes + " " + userPath + fileName.trim() + " " + userPath + " "); + } + } + + private static String execShell(String cmd) throws IOException { + Process p = Runtime.getRuntime().exec(cmd); + if (p != null) { + StringBuilder sb = new StringBuilder(); + InputStream in = null; + try { + in = p.getInputStream(); + int c = -1; + while ((c = in.read()) != -1) { + sb.append((char) c); + } + } finally { + if (in != null) + in.close(); + } + try { + in = p.getErrorStream(); + int c = -1; + boolean flag = true; + while ((c = in.read()) != -1) { + if (flag) { + sb.append("\r\n"); + } else { + flag = false; + } + sb.append((char) c); + } + } finally { + if (in != null) + in.close(); + } + return sb.toString(); + } + return null; + } + + /** + * Download a JAR file + * + * @param fileName + * @param offset + * @param fileData + * @throws SQLException + * @throws IOException + */ + public static void get(String fileName, int offset, String[] fileData, long[] fileLength) + throws SQLException, IOException { + checkFileName(fileName); + Connection conn = getConn(); + LOG.info("Get " + fileName); + String userPath = getCodeFilePath(conn); + close(conn); + File file = new File(userPath + fileName); + if (!file.exists()) { + throw new SQLException("No such file[" + fileName + "]"); + } + RandomAccessFile rAFile = null; + try { + rAFile = new RandomAccessFile(file, "r"); + rAFile.seek(offset); + byte bArray[] = new byte[MaxDataSize]; + int bytesRead = rAFile.read(bArray, 0, MaxDataSize); + if (bytesRead != -1) { + fileData[0] = new String(Snappy.compress(Arrays.copyOf(bArray, bytesRead)), CHARTSET); + fileLength[0] = file.length(); + LOG.info("Download: " + fileName + ", offset:" + offset + ",compressed length:" + fileData[0].length() + + ",file length:" + fileLength[0]); + } + } finally { + if (rAFile != null) { + try { + rAFile.close(); + } catch (Exception e) { + LOG.warn("Something wrong while close file[" + fileName + "] stream: " + e.getMessage()); + } + } + } + + } + + /** + * Remove exact file + * + * @param fileName + * @throws SQLException + */ + public static void rm(String fileName) throws SQLException { + checkFileName(fileName); + Connection conn = getConn(); + LOG.info("Remove " + fileName); + String userPath = getCodeFilePath(conn); + close(conn); + File file = new File(userPath + fileName); + if (file.exists()) { + file.delete(); + LOG.info("Remove " + fileName + " successfully!"); + return; + } else { + throw new SQLException("No such file[" + fileName + "]"); + } + } + + /** + * Remove files via regular formulation + * + * @param pattern: + * to be deleted + * @param names + * : file names to be deleted + * @throws SQLException + */ + public static void rmRex(String pattern, String[] names) throws SQLException { + checkFileName(pattern); + Connection conn = getConn(); + LOG.info("Try to remove files[" + pattern + "]"); + String userPath = getCodeFilePath(conn); + close(conn); + File[] files = getFiles(pattern, new File(userPath)); + StringBuilder sb = new StringBuilder(); + sb.append("<rmRex>"); + sb.append(toXML(files, "rmList")); + sb.append("<message>"); + boolean hasError = false; + for (File f : files) { + try { + f.delete(); + } catch (Exception e) { + hasError = true; + LOG.error(e.getMessage(), e); + sb.append("<error fileName='" + f.getName() + "'>" + e.getMessage() + "</error>"); + } + } + if (!hasError) { + sb.append("Remove the files successfully!"); + } + sb.append("</message>"); + sb.append("</rmRex>"); + names[0] = sb.toString(); + LOG.info("Done for removing files[" + pattern + "]."); + } + + public static void lsAll(String[] names) throws SQLException { + ls("*", names); + } + + /** + * list the Jars matching PATTERN + * + * @param pattern: + * @param names + * @throws SQLException + */ + public static void ls(String pattern, String[] names) throws SQLException { + checkFileName(pattern); + Connection conn = getConn(); + LOG.info("List files[" + pattern + "]"); + String userPath = getCodeFilePath(conn); + close(conn); + File dir = new File(userPath); + if (!dir.exists() || !dir.isDirectory()) { + LOG.error("Directory [" + userPath + "] is not found!"); + throw new SQLException("Directory [" + userPath + "] is not found!"); + } + if (pattern == null) { + LOG.error("File pattern should not be empty!"); + throw new SQLException("Pattern is empty!"); + } + File[] files = getFiles(pattern, dir); + names[0] = toXML(files, "ls"); + } + + /** + * upload a JAR file + * + * @param fileData + * @param fileName + * @param appendFlag + * 0: append; otherwise overwrite + * @throws SQLException + */ + public static void put(String fileData, String fileName, int appendFlag) throws SQLException { + checkFileName(fileName); + try { + byte[] data = fileData.getBytes(CHARTSET); + + Connection conn = getConn(); + LOG.info("Put " + fileName + ", length: " + data.length + ", file string length:" + fileData.length()); + String userPath = getCodeFilePath(conn); + close(conn); + String fname = userPath + fileName; + checkFile(fname, data.length); + FileOutputStream fos = null; + try { + fos = new FileOutputStream(fname, (appendFlag == 0)); + + fos.write(Snappy.uncompress(Arrays.copyOf(data, data.length))); + fos.flush(); + } finally { + if (fos != null) + fos.close(); + } + + syncJar(userPath, fileName); + + } catch (Throwable t) { + LOG.error(t.getMessage(), t); + throw new SQLException(t.getMessage()); + } + } + + private static void checkFileName(String fileName) throws SQLException { + if (fileName.contains("/") || fileName.contains("\\")) + throw new SQLException("Illegal file name: " + fileName + + ". File name must not contain \"/\"."); + } + + private static void checkFile(String fname, int dataSize) throws SQLException { + File jar = new File(fname); + if (jar.length() + dataSize > MAX_JAR_FILE_SIZE) { + LOG.error("Jar file size is over the threshold[100Mb]"); + throw new SQLException("Jar file size is over the threshold[100Mb]"); + } + } + + private static String getCodeFilePath(Connection conn) throws SQLException { + String user = getCurrentUser(conn); + String root = System.getenv("MY_SQROOT"); + if (root == null || "".equals(root.trim())) { + LOG.error("Cant get your traf installation path!"); + throw new SQLException("Cant get your traf installation path!"); + } + File file = new File(root + "/spj/" + user); + if (!file.exists()) { + file.mkdirs(); + } else if (!file.isDirectory()) { + throw new SQLException("User Directory is not valide or you dont have permission!"); + } + LOG.info("SPJ JARs location: " + file.getAbsolutePath()); + return file.getAbsolutePath() + "/"; + } + + private static Connection getConn() throws SQLException { + Connection conn = null; + try { + conn = DriverManager.getConnection(url); + LOG.info("Create connection successfully. " + conn); + } catch (Throwable t) { + LOG.error("Error encountered while getting connection ", t); + throw new SQLException(t.getMessage()); + } + return conn; + } + + private static String getCurrentUser(Connection conn) throws SQLException { + Statement st = null; + ResultSet rs = null; + String user = null; + try { + st = conn.createStatement(); + rs = st.executeQuery("values(current_user)"); + if (rs.next()) { + user = rs.getString(1); + } + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SQLException(e); + } finally { + if (rs != null) { + try { + rs.close(); + } catch (Exception e) { + LOG.warn(e.getMessage(), e); + } + } + if (st != null) { + try { + st.close(); + } catch (Exception e) { + LOG.warn(e.getMessage(), e); + } + } + } + + return user; + } + + private static File[] getFiles(String pattern, File dir) { + final String p = pattern.replaceAll("\\*", ".*").trim().toUpperCase(); + return dir.listFiles(new FileFilter() { + + @Override + public boolean accept(File name) { + if (name == null || !name.isFile()) { + return false; + } + return name.getName().trim().toUpperCase().matches(p); + } + }); + } + + private static String toXML(File[] files, String root) { + StringBuilder sb = new StringBuilder(); + sb.append("<" + root + ">"); + for (File f : files) { + sb.append("<file name='" + f.getName() + "' lastModifyTime='" + format.format(new Date(f.lastModified())) + + "' size='" + f.length() + "'/>"); + } + sb.append("</" + root + ">"); + return sb.toString(); + } + + private static void close(Connection conn) { + try { + conn.close(); + LOG.info("Closed connection"); + } catch (Exception e) { + LOG.warn(e.getMessage()); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/84f4ccdc/core/conn/spj_init/src/main/resources/init_spj.sql ---------------------------------------------------------------------- diff --git a/core/conn/spj_init/src/main/resources/init_spj.sql b/core/conn/spj_init/src/main/resources/init_spj.sql new file mode 100644 index 0000000..c70bc87 --- /dev/null +++ b/core/conn/spj_init/src/main/resources/init_spj.sql @@ -0,0 +1,156 @@ +#!/bin/bash +# @@@ START COPYRIGHT @@@ +# +# 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. +# +# @@@ END COPYRIGHT @@@ + +SERVER_JAR=${MY_SQROOT}/export/lib/spj_init.jar +CI_SERVER_LOG=${MY_SQROOT}/ciserver/cislog +SQLCI=${MY_SQROOT}/export/bin32/sqlci +CP=/bin/cp +MANAGEABILITY_CATALOG=TRAFODION +CIS_SCHEMA=DEFAULT_SPJ + + +function dropAndCreateSchema { + echo "Creating Schema for CI Server Component" + sqlci << sqlciEOF + + cqd CAT_IGNORE_ALREADY_EXISTS_ERROR 'on'; + cqd CAT_IGNORE_DOES_NOT_EXIST_ERROR 'on'; + + DROP SCHEMA $MANAGEABILITY_CATALOG.$CIS_SCHEMA CASCADE; + CREATE SCHEMA $MANAGEABILITY_CATALOG.$CIS_SCHEMA; + + cqd CAT_IGNORE_ALREADY_EXISTS_ERROR 'off'; + cqd CAT_IGNORE_DOES_NOT_EXIST_ERROR 'off'; + + exit; +sqlciEOF +} + +function createProcedures { + + echo "Creating Procedures in schema '$MANAGEABILITY_CATALOG.$CIS_SCHEMA' " + sqlci << procEOF + + cqd CAT_IGNORE_ALREADY_EXISTS_ERROR 'on'; + cqd CAT_IGNORE_DOES_NOT_EXIST_ERROR 'on'; + + -- Creating Procedures + set schema $MANAGEABILITY_CATALOG.$CIS_SCHEMA; + + DROP LIBRARY SPJMGMT CASCADE; + CREATE LIBRARY SPJMGMT FILE '${SERVER_JAR}'; + + CREATE PROCEDURE HELP ( + INOUT COMMANDNAME VARCHAR(2560) CHARACTER SET ISO88591) + EXTERNAL NAME 'com.traf.mgmt.JarFileMgmt.help (java.lang.String[])' + EXTERNAL SECURITY DEFINER + LIBRARY SPJMGMT + LANGUAGE JAVA + PARAMETER STYLE JAVA + READS SQL DATA + ; + GRANT EXECUTE ON PROCEDURE HELP TO PUBLIC; + + CREATE PROCEDURE PUT ( + IN FILEDATA VARCHAR(102400) CHARACTER SET ISO88591, + IN FILENAME VARCHAR(256) CHARACTER SET ISO88591, + IN CREATEFLAG INTEGER) + EXTERNAL NAME 'com.traf.mgmt.JarFileMgmt.put(java.lang.String,java.lang.String,int)' + EXTERNAL SECURITY DEFINER + LIBRARY SPJMGMT + LANGUAGE JAVA + PARAMETER STYLE JAVA + READS SQL DATA + ; + GRANT EXECUTE ON PROCEDURE PUT TO PUBLIC; + + CREATE PROCEDURE LS ( + IN FILENAME VARCHAR(256) CHARACTER SET ISO88591, + OUT FILENAMES VARCHAR(10240) CHARACTER SET ISO88591) + EXTERNAL NAME 'com.traf.mgmt.JarFileMgmt.ls(java.lang.String,java.lang.String[])' + EXTERNAL SECURITY DEFINER + LIBRARY SPJMGMT + LANGUAGE JAVA + PARAMETER STYLE JAVA + READS SQL DATA + ; + GRANT EXECUTE ON PROCEDURE LS TO PUBLIC; + + CREATE PROCEDURE LSALL ( + OUT FILENAMES VARCHAR(10240) CHARACTER SET ISO88591) + EXTERNAL NAME 'com.traf.mgmt.JarFileMgmt.lsAll(java.lang.String[])' + EXTERNAL SECURITY DEFINER + LIBRARY SPJMGMT + LANGUAGE JAVA + PARAMETER STYLE JAVA + READS SQL DATA + ; + GRANT EXECUTE ON PROCEDURE LSALL TO PUBLIC; + + CREATE PROCEDURE RM ( + IN FILENAME VARCHAR(256) CHARACTER SET ISO88591) + EXTERNAL NAME 'com.traf.mgmt.JarFileMgmt.rm(java.lang.String)' + EXTERNAL SECURITY DEFINER + LIBRARY SPJMGMT + LANGUAGE JAVA + PARAMETER STYLE JAVA + READS SQL DATA + ; + GRANT EXECUTE ON PROCEDURE RM TO PUBLIC; + + CREATE PROCEDURE RMREX ( + IN FILENAME VARCHAR(256) CHARACTER SET ISO88591, + OUT FILENAMES VARCHAR(10240) CHARACTER SET ISO88591) + EXTERNAL NAME 'com.traf.mgmt.JarFileMgmt.rmRex(java.lang.String, java.lang.String[])' + EXTERNAL SECURITY DEFINER + LIBRARY SPJMGMT + LANGUAGE JAVA + PARAMETER STYLE JAVA + READS SQL DATA + ; + GRANT EXECUTE ON PROCEDURE RMREX TO PUBLIC; + + CREATE PROCEDURE GETFILE ( + IN FILENAME VARCHAR(256) CHARACTER SET ISO88591, + IN OFFSET INTEGER, + OUT FILEDATA VARCHAR(102400) CHARACTER SET ISO88591, + OUT DATALENGTH LARGEINT) + EXTERNAL NAME 'com.traf.mgmt.JarFileMgmt.get (java.lang.String,int,java.lang.String[],long[])' + EXTERNAL SECURITY DEFINER + LIBRARY SPJMGMT + LANGUAGE JAVA + PARAMETER STYLE JAVA + READS SQL DATA + ; + GRANT EXECUTE ON PROCEDURE GETFILE TO PUBLIC; + + cqd CAT_IGNORE_ALREADY_EXISTS_ERROR 'off'; + cqd CAT_IGNORE_DOES_NOT_EXIST_ERROR 'off'; + + exit; +procEOF + +} + +dropAndCreateSchema +createProcedures +echo "Successfully completed installation of SPJs." http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/84f4ccdc/core/conn/spj_init/src/test/java/com/trafodion/mgmt/JarFileMgmtTest.java ---------------------------------------------------------------------- diff --git a/core/conn/spj_init/src/test/java/com/trafodion/mgmt/JarFileMgmtTest.java b/core/conn/spj_init/src/test/java/com/trafodion/mgmt/JarFileMgmtTest.java new file mode 100644 index 0000000..d424f0f --- /dev/null +++ b/core/conn/spj_init/src/test/java/com/trafodion/mgmt/JarFileMgmtTest.java @@ -0,0 +1,27 @@ +/** +* @@@ START COPYRIGHT @@@ +* +* 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. +* +* @@@ END COPYRIGHT @@@ + */ +package com.trafodion.mgmt; + +public class JarFileMgmtTest { + +}
