@NotNull public static Scriptum of(@NotNull final Class clazz) { ClassLoader classLoader = clazz.getClassLoader(); String className = clazz.getName(); String path = className.replace('.', '/'); String resourceName = path + ".sql"; return of(classLoader, resourceName); }
@Override public void performCommand(@NotNull final DBTransaction transaction, @NotNull final Scriptum scriptum, @NotNull final String commandName) { final SqlCommand command = scriptum.command(commandName); performCommand(transaction, command); }
@Override public void performCommandOrMetaQueryCommands(@NotNull final Scriptum scriptum, @NotNull final String operationName) { if (scriptum.findText(operationName + "Command") != null) { performCommand(scriptum, operationName + "Command"); } else if (scriptum.findText(operationName + "MetaQuery") != null) { performMetaQueryCommands(scriptum, operationName + "MetaQuery"); } else { throw new IllegalArgumentException(format( "The scriptum has no operation %sCommand or %sMetaQuery", operationName, operationName)); } }
@NotNull public final SqlCommand command(@NotNull final String name) { TextFileFragment fragment = getText(name); fragment = stripSingleStatement(fragment); return new SqlCommand(fragment); }
@Test public void fileWithOneCommand_script() { Scriptum scriptum1 = Scriptum.of(ScriptumBasicTest.class, "FileWithOneCommand"); SqlScript script = scriptum1.script("TheCommand"); assertThat(script).isNotNull(); assertThat(script.count()).isEqualTo(1); List<? extends SqlStatement> statements = script.getStatements(); SqlStatement statement = statements.get(0); assertThat(statement.getSourceText()).contains("select something", "from some_table"); }
@Test public void listFragmentNames_basic() { Scriptum scriptum = Scriptum.of(ScriptumBasicTest.class, "FileWithFragments"); List<String> names = scriptum.listFragmentNames(); assertThat(names) .isNotEmpty() .containsSequence("0", "first-fragment", "second-fragment"); }
@Test public void listFragments_basic() { Scriptum scriptum = Scriptum.of(ScriptumBasicTest.class, "FileWithFragments"); List<TextFileFragment> fragments = scriptum.listFragments(); assertThat(fragments).hasSize(3); assertThat(fragments.get(0).getFragmentName()).isEqualTo("0"); assertThat(fragments.get(1).getFragmentName()).isEqualTo("first-fragment"); assertThat(fragments.get(2).getFragmentName()).isEqualTo("second-fragment"); assertThat(fragments.get(0).text).contains("zero fragment"); assertThat(fragments.get(1).text).contains("the first fragment"); assertThat(fragments.get(2).text).contains("the second fragment"); }
@Override public void performMetaQueryCommands(@NotNull final Scriptum scriptum, @NotNull final String metaQueryName, final Object... params) { final SqlQuery<List<String>> metaQuery = scriptum.query(metaQueryName, listOf(oneOf(String.class))); performMetaQueryCommands(metaQuery, params); }
@Override public void performScript(@NotNull final Scriptum scriptum, @NotNull final String scriptName) { final SqlScript script = scriptum.script(scriptName); performScript(script); }
@NotNull public final SqlScript script(@NotNull final String name) { TextFragment fragment = getText(name); SqlScriptBuilder b = new SqlScriptBuilder(); b.parse(fragment.text); return new SqlScript(b.build()); }
@NotNull public static Scriptum dialectOf(@NotNull final Scriptum parentScriptum, @Nullable final String dialect) { if (eq(parentScriptum.myDialect, dialect)) { return parentScriptum; } else { return new Scriptum(parentScriptum.myResources, dialect); } }
@NotNull public final <S> SqlQuery<S> query(@NotNull final String name, @NotNull final ResultLayout<S> layout) { TextFileFragment fragment = getText(name); fragment = stripSingleStatement(fragment); final SqlQuery<S> query = new SqlQuery<S>(fragment, layout); query.setDisplayName(fragment.getFragmentName()); return query; }
protected void performMetaQueryCommandsIterative(@NotNull final Scriptum scriptum, @NotNull final String metaQueryName, final int retries, final Object... params) { final SqlQuery<List<String>> metaQuery = scriptum.query(metaQueryName, listOf(oneOf(String.class))); db.inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { for (int i = 0; i < retries; ++i) { List<String> commands = session.query(metaQuery).withParams(params).run(); try { for (String command : commands) { if (command != null && command.length() > 0) { session.command(command).run(); } } i = retries + 1; } catch (DBException e) { if (i + 1 >= retries) throw e; } } } }); }
@NotNull public static Scriptum of(final ClassLoader classLoader, final String resourceName) { ArrayList<ScriptumResource> sr = new ArrayList<ScriptumResource>(2); boolean exists = classLoader.getResource(resourceName) != null; if (exists) { ScriptumResourceFromJava r2 = new ScriptumResourceFromJava(classLoader, resourceName); sr.add(r2); } else { throw new IllegalArgumentException(String.format("Resources for class %s not found", resourceName)); } ScriptumResource[] resources = sr.toArray(new ScriptumResource[sr.size()]); return new Scriptum(resources, null); }
@Override public void performCommand(@NotNull final Scriptum scriptum, @NotNull final String commandName) { final SqlCommand command = scriptum.command(commandName); performCommand(command); }
@NotNull public static Scriptum of(@NotNull final Class clazz, @NotNull final String name) { ClassLoader classLoader = clazz.getClassLoader(); String packageName = clazz.getPackage().getName(); String path = packageName.replace('.', '/'); String fileName = name; if (!fileName.contains(".")) fileName += ".sql"; String resourceName = path + '/' + fileName; return of(classLoader, resourceName); }
protected void check_TheCommand(final String queryName) { SqlQuery<Character> query = myScriptum.query(queryName, Layouts.singleOf(Character.class)); assertThat(query.mySourceText).isEqualTo("The Command"); }
TextFileFragment fragment = findText(name); if (fragment != null) { return fragment;