Skip to content

Commit

Permalink
Added PL/SQL methods for getting FM version.
Browse files Browse the repository at this point in the history
1. Fixed issue #18.
2. Changed using `getColumnName` method to `getColumnLabel` in result set processing.
  • Loading branch information
Victor Osolovskiy committed Aug 6, 2015
1 parent 272fe0d commit 625f7c0
Show file tree
Hide file tree
Showing 13 changed files with 102 additions and 28 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -7,7 +7,7 @@

<groupId>ftldb</groupId>
<artifactId>ftldb</artifactId>
<version>1.4.0-rc1</version>
<version>1.4.0</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/ftldb/CommandLine.java
Expand Up @@ -45,7 +45,7 @@ public static void main(String[] args) throws IOException, TemplateException {

if (args.length < 1) {
exitWithUsageExample("FTLDB v" + Configurator.getVersion() + ","
+ " based on FreeMarker v" + Configuration.getVersion() + ".");
+ " based on FreeMarker v" + Configurator.getFreeMarkerVersion() + ".");
}

Configuration cfg;
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/ftldb/Configurator.java
Expand Up @@ -171,4 +171,14 @@ private static Version readVersion() {
}


/**
* Returns FreeMarker version as a {@link Version} instance.
*
* @return FreeMarker version
*/
public static Version getFreeMarkerVersion() {
return Configuration.getVersion();
}


}
35 changes: 18 additions & 17 deletions src/main/java/ftldb/ext/sql/FetchedResultSet.java
Expand Up @@ -34,7 +34,7 @@ public class FetchedResultSet {


public final ResultSetMetaData metaData;
public final String[] columnNames;
public final String[] columnLabels;
public final Map columnIndices;
public final Object[][] data;

Expand All @@ -49,14 +49,14 @@ public FetchedResultSet(ResultSet rs) throws SQLException {
metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();

columnNames = new String[columnCount];
columnIndices = new HashMap(columnNames.length, 1);
columnLabels = new String[columnCount];
columnIndices = new HashMap(columnLabels.length, 1);

for (int i = 0; i < columnCount; i++) {
columnNames[i] = metaData.getColumnName(i + 1);
// if two columns have same names, save only the 1st one
if (columnIndices.get(columnNames[i]) == null) {
columnIndices.put(columnNames[i], new Integer(i));
columnLabels[i] = metaData.getColumnLabel(i + 1);
// if two columns have same labels, save only the 1st one
if (columnIndices.get(columnLabels[i]) == null) {
columnIndices.put(columnLabels[i], new Integer(i));
}
}

Expand Down Expand Up @@ -91,24 +91,25 @@ public ResultSetMetaData getMetaData() {


/**
* Returns the specified column's index starting from 0.
* Returns the specified column's index starting from 0. This index is used to access FTL sequences.
*
* @param name the column's name
* @return the column's index or {@code null} if no column with such name exists
* @param label the column's label
* @return the column's index or {@code null} if no column with such label exists
*/
public Integer getColumnIndex(String name) {
return (Integer) columnIndices.get(name);
public Integer getColumnIndex(String label) {
return (Integer) columnIndices.get(label);
}


/**
* Returns the specified column's position starting from 1.
* Returns the specified column's position starting from 1 as {@link ResultSet#findColumn(String)} does. This
* index is used in {@link ResultSetMetaData} methods.
*
* @param name the column's name
* @return the column's position or {@code null} if no column with such name exists
* @param label the column's label
* @return the column's position or {@code null} if no column with such label exists
*/
public Integer getColumnPosition(String name) {
Integer index = getColumnIndex(name);
public Integer findColumn(String label) {
Integer index = getColumnIndex(label);
if (index == null) return null;
return new Integer(index.intValue() + 1);
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/ftldb/ext/sql/FetchedResultSetModel.java
Expand Up @@ -126,12 +126,12 @@ public TemplateCollectionModel values() {
*/
public String getAsString() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < frs.columnNames.length; i++) {
sb.append(frs.columnNames[i]).append('\t');
for (int i = 0; i < frs.columnLabels.length; i++) {
sb.append(frs.columnLabels[i]).append('\t');
}
sb.append('\n');
for (int ri = 0; ri < frs.data.length; ri++) {
for (int ci = 0; ci < frs.columnNames.length; ci++) {
for (int ci = 0; ci < frs.columnLabels.length; ci++) {
sb.append(frs.data[ri][ci]).append('\t');
}
sb.append('\n');
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/ftldb/ext/sql/FetchedResultSetRowModel.java
Expand Up @@ -77,7 +77,7 @@ public int size() {
* @return a list of column names ordered by position
*/
public TemplateCollectionModel keys() throws TemplateModelException {
return new SimpleCollection(Arrays.asList(resultSet.columnNames), getObjectWrapper());
return new SimpleCollection(Arrays.asList(resultSet.columnLabels), getObjectWrapper());
}


Expand Down
4 changes: 2 additions & 2 deletions src/main/java/ftldb/ext/sql/FetchedResultSetTransposed.java
Expand Up @@ -30,9 +30,9 @@ public FetchedResultSetTransposed(FetchedResultSet frs) {

this.resultSet = frs;

transposedData = new Object[resultSet.columnNames.length][];
transposedData = new Object[resultSet.columnLabels.length][];
for (int ri = 0; ri < resultSet.data.length; ri++) {
for (int ci = 0; ci < resultSet.columnNames.length; ci++) {
for (int ci = 0; ci < resultSet.columnLabels.length; ci++) {
if (transposedData[ci] == null) transposedData[ci] = new Object[resultSet.data.length];
transposedData[ci][ri] = resultSet.data[ri][ci];
}
Expand Down
Expand Up @@ -73,7 +73,7 @@ public int size() {
* @return a list of column names ordered by position
*/
public TemplateCollectionModel keys() throws TemplateModelException {
return new SimpleCollection(java.util.Arrays.asList(frst.resultSet.columnNames), getObjectWrapper());
return new SimpleCollection(java.util.Arrays.asList(frst.resultSet.columnLabels), getObjectWrapper());
}


Expand Down
20 changes: 20 additions & 0 deletions src/main/java/ftldb/oracle/Configurator.java
Expand Up @@ -58,4 +58,24 @@ public static int getVersionNumber() {
}


/**
* Returns FreeMarker version as a string.
*
* @return FreeMarker version
*/
public static String getFreeMarkerVersionString() {
return getFreeMarkerVersion().toString();
}


/**
* Returns FreeMarker version as a comparable integer.
*
* @return FreeMarker version
*/
public static int getFreeMarkerVersionNumber() {
return getFreeMarkerVersion().intValue();
}


}
20 changes: 18 additions & 2 deletions src/main/plsql/ftldb_api.pkb
Expand Up @@ -179,8 +179,10 @@ procedure init(in_config_func_name in varchar2)
is
l_config_xml xmltype;
begin
execute immediate 'call ' || in_config_func_name || '() into :1'
using out l_config_xml;
execute immediate
'call ' || dbms_assert.sql_object_name(in_config_func_name) || '() into :1'
using out l_config_xml;

init(l_config_xml);
end init;

Expand Down Expand Up @@ -262,6 +264,20 @@ begin
end get_version_number;


function get_freemarker_version return varchar2
is
begin
return ftldb_wrapper.get_freemarker_version();
end get_freemarker_version;


function get_freemarker_version_number return integer
is
begin
return ftldb_wrapper.get_freemarker_version_number();
end get_freemarker_version_number;


begin
init();
exception
Expand Down
16 changes: 16 additions & 0 deletions src/main/plsql/ftldb_api.pks
Expand Up @@ -196,5 +196,21 @@ function get_version return varchar2;
function get_version_number return integer;


/**
* Returns the FreeMarker version as a string.
*
* @return FreeMarker version
*/
function get_freemarker_version return varchar2;


/**
* Returns the FreeMarker version as a comparable integer.
*
* @return FreeMarker version
*/
function get_freemarker_version_number return integer;


end ftldb_api;
/
10 changes: 10 additions & 0 deletions src/main/plsql/ftldb_wrapper.pks
Expand Up @@ -49,6 +49,16 @@ is
language java name 'ftldb.oracle.Configurator.getVersionNumber() return int';


function get_freemarker_version return varchar2
is
language java name 'ftldb.oracle.Configurator.getFreeMarkerVersionString() return java.lang.String';


function get_freemarker_version_number return number
is
language java name 'ftldb.oracle.Configurator.getFreeMarkerVersionNumber() return int';


procedure process(in_templ_name in varchar2, io_result in out clob)
is
language java name 'ftldb.oracle.TemplateProcessor.process(java.lang.String, java.sql.Clob[])';
Expand Down
1 change: 1 addition & 0 deletions src/test/java/ftldb/VersionTest.java
Expand Up @@ -24,6 +24,7 @@ public class VersionTest {
@Test
public void printVersion() throws Exception {
System.out.println("FTLDB version: " + Configurator.getVersion());
System.out.println("FeeMarker version: " + Configurator.getFreeMarkerVersion());
}

}

0 comments on commit 625f7c0

Please sign in to comment.