@NotNull private TextFileFragment stripSingleStatement(@NotNull final TextFileFragment fragment) { Matcher m = STRIP_SINGLE_STATEMENT_PATTERN.matcher(fragment.text); if (m.find()) { int n = fragment.text.length(); n -= m.group(1).length(); final String text = rtrim(fragment.text.substring(0, n)); return new TextFileFragment(text, fragment.getTextName(), fragment.row, fragment.pos, fragment.getFragmentName()); } else { return fragment; } }
protected SqlStatement(@NotNull TextFragment sourceFragment) { mySourceText = sourceFragment.text; myRow = sourceFragment.row; final String mainDescriptionPart; if (sourceFragment instanceof TextFileFragment) { TextFileFragment f = (TextFileFragment) sourceFragment; String name = f.getFragmentName(); myName = name; if (name == null) name = "SQL fragment"; mainDescriptionPart = name + " from " + f.getTextName() + ':' + f.row + ':' + f.pos; } else { //noinspection UnnecessaryLocalVariable TextFragment f = sourceFragment; mainDescriptionPart = "SQL statement from " + f.getTextName() + ':' + f.row + ':' + f.pos; myName = null; } // TODO add some additional info to the mainDescriptionPart myDescription = mainDescriptionPart; }
protected void loadIfNeeded() { if (myFragments == null) { myFragments = loadFragments(); myFragmentsMap = new TreeMap<String, TextFileFragment>(String.CASE_INSENSITIVE_ORDER); for (TextFileFragment fragment : myFragments) { if (fragment.getFragmentName() != null) { myFragmentsMap.put(fragment.getFragmentName(), fragment); } } } }
private void putTheText(final ArrayList<TextFileFragment> fragments, final StringBuilder buf, final int row, final String name) { String text = Strings.rtrim(buf.toString()); TextFileFragment fragment = new TextFileFragment(text, myFileName, row, 1, name); fragments.add(fragment); }
@NotNull String[] getExistentNames() { loadIfNeeded(); int n = myFragments.length; String[] names = new String[n]; for (int i = 0; i < n; i++) names[i] = myFragments[i].getFragmentName(); return names; }
@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; }
@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"); }