Skip to content

Instantly share code, notes, and snippets.

@krisrice
Last active November 29, 2017 19:13
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krisrice/8da5e6cbc07db5becde799742a3c72d2 to your computer and use it in GitHub Desktop.
Save krisrice/8da5e6cbc07db5becde799742a3c72d2 to your computer and use it in GitHub Desktop.
load('helpers.js');
/*
CREATE TABLE K
( PATH VARCHAR2(2000),
BLOB_CONTENT BLOB,
mime varchar2(40),
WHEN TIMESTAMP (6)
)
*/
/* File name */
var File = Java.type("java.io.File")
var FilenameFilter = Java.type("java.io.FilenameFilter")
var dir = "."
var cwd = new File(dir);
var allFiles = cwd.listFiles();
var files=[];
for(f in allFiles ){
if ( allFiles[f].isFile() ){
files[realFileList.length++] = allFiles[f];
}
}
for(var file in files){
/* load binds */
binds = helpers.getBindMap();
/* add more binds */
binds.put("path",files[file].toString().substring(2));
var ext = files[file].toString().substring(files[file].toString().lastIndexOf("."));
var mime=""
switch (ext){
case '.js' :
mime = 'application/javascript'
break;
case '.sql' :
mime = 'application/sql'
break;
case '.log' :
mime = 'plain/text'
break;
default:
mime = 'application/octet'
}
binds.put("mime",mime)
ctx.write("Loading:"+ files[file] + "\n")
blob = helpers.getBlobFromFile(files[file]);
ctx.write("\t>"+ blob.length()+":" + files[file] + "\n")
binds.put("b",blob);
/* exec the insert and pass binds */
var ret = util.execute("insert into k(path,blob_content,mime,when) values(:path , :b,:mime,systimestamp)",binds);
var ex = util.getLastException();
if ( ex ){
ctx.write(ex+ "\n")
}
}
/* print the results */
sqlcl.setStmt("select path,dbms_lob.getlength(blob_content) from k order by when desc;");
sqlcl.run();
@vincentmorneau
Copy link

https://gist.github.com/krisrice/8da5e6cbc07db5becde799742a3c72d2#file-blobs-helper-js-L25 this no longer works on Java 9. Any clue?

Nov 04, 2017 6:57:31 PM oracle.dbtools.raptor.newscriptrunner.ScriptExecutor run
SEVERE: java.base/java.lang.invoke.MethodHandle.asTypeUncached(MethodHandle.java:786)
java.lang.invoke.WrongMethodTypeException: cannot convert MethodHandle(ScriptFunction,Object,Object,Object)int to (ScriptFunction,Object,Object,Object)FileVisitResult
	at java.base/java.lang.invoke.MethodHandle.asTypeUncached(MethodHandle.java:786)
	at java.base/java.lang.invoke.MethodHandle.asType(MethodHandle.java:772)
	at jdk.dynalink/jdk.dynalink.TypeConverterFactory.asType(TypeConverterFactory.java:280)
	at jdk.dynalink/jdk.dynalink.LinkerServicesImpl.asType(LinkerServicesImpl.java:131)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.changeReturnType(CompiledFunction.java:731)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.createInvoker(CompiledFunction.java:715)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.access$200(CompiledFunction.java:62)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction$2.get(CompiledFunction.java:677)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction$2.get(CompiledFunction.java:674)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.getValidOptimisticInvocation(CompiledFunction.java:620)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.createFunctionInvocation(CompiledFunction.java:674)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.findCallMethod(ScriptFunction.java:949)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptObject.lookup(ScriptObject.java:1874)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(NashornLinker.java:104)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(NashornLinker.java:96)
	at jdk.dynalink/jdk.dynalink.linker.support.CompositeTypeBasedGuardingDynamicLinker.getGuardedInvocation(CompositeTypeBasedGuardingDynamicLinker.java:184)
	at jdk.dynalink/jdk.dynalink.linker.support.CompositeGuardingDynamicLinker.getGuardedInvocation(CompositeGuardingDynamicLinker.java:132)
	at jdk.dynalink/jdk.dynalink.LinkerServicesImpl.lambda$getGuardedInvocation$0(LinkerServicesImpl.java:160)
	at jdk.dynalink/jdk.dynalink.LinkerServicesImpl.getWithLookupInternal(LinkerServicesImpl.java:191)
	at jdk.dynalink/jdk.dynalink.LinkerServicesImpl.getGuardedInvocation(LinkerServicesImpl.java:158)
	at jdk.dynalink/jdk.dynalink.DynamicLinker.relink(DynamicLinker.java:265)
	at jdk.nashorn.javaadapters.java_nio_file_SimpleFileVisitor.visitFile(Unknown Source)
	at java.base/java.nio.file.Files.walkFileTree(Files.java:2713)
	at java.base/java.nio.file.Files.walkFileTree(Files.java:2785)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$11$\^eval\_$cu1$restOf.:program(<eval>:72)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:652)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:517)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:448)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:405)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:401)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:154)
	at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
	at oracle.dbtools.scripting.ScriptingUtils.runScript(ScriptingUtils.java:39)
	at oracle.dbtools.raptor.scriptrunner.commands.ScriptCommand.runScript(ScriptCommand.java:175)
	at oracle.dbtools.raptor.scriptrunner.commands.ScriptCommand.handleEvent(ScriptCommand.java:126)
	at oracle.dbtools.raptor.newscriptrunner.CommandRegistry.fireListeners(CommandRegistry.java:434)
	at oracle.dbtools.raptor.newscriptrunner.ScriptRunner.run(ScriptRunner.java:214)
	at oracle.dbtools.raptor.newscriptrunner.ScriptExecutor.run(ScriptExecutor.java:336)
	at oracle.dbtools.raptor.newscriptrunner.ScriptExecutor.run(ScriptExecutor.java:225)
	at oracle.dbtools.raptor.scriptrunner.cmdline.SqlCli.runFile(SqlCli.java:785)
	at oracle.dbtools.raptor.scriptrunner.cmdline.SqlCli.handleAtFiles(SqlCli.java:763)
	at oracle.dbtools.raptor.scriptrunner.cmdline.SqlCli.main(SqlCli.java:485)

@krisrice
Copy link
Author

krisrice commented Nov 7, 2017

Waiting on the nashorn team to tell me why this broke. I can't see any reason. It's in the extending the SimpleFileVisitor somehow.

@krisrice
Copy link
Author

krisrice commented Nov 8, 2017

It's a java9 bug that worked in java8 and now fixed in java10. I'll have to rewrite this to work in 9.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment