Braces { in "sql" source not working

It seems to be from Liquibase calling the Oracle driver’s connection.nativeSQL(sql) method. The braces get lost from that.

Do you know if there are any issues or work-arounds at the driver level with SQL with braces?

Nathan

Stepping through, the braces seem to be lost in JdbcConnection with a call to connection.nativeSQL(sql).  Perhaps it is confused with your brace and “\ ?”  ? If you add some newlines in there, perhaps it may help?

Nathan

I want to use “create or replace java source …” in Oracle but the braces ‘{’

and the next nonblank in the Java code are being stripped. How can I overcome this?

I have seen a previous post about putting a question mark ‘?’ in the sql to disable JDBC Escape Processing but this doesn’t seem to work.  I’ve looked at JDBCExecutor.java and that has some code to handle this but when I turn on debug logging, it seems tha the brace and following nonblank character have already been stripped before the sql is executed.

The following changeset:
  1.               

Results in the following:

  1.      [exec] DEBUG 29/07/14 4:01 PM: liquibase: wcpu.msr.changelog.xml: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin: Running Changeset:wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin      [exec] DEBUG 29/07/14 4:01 PM: liquibase: wcpu.msr.changelog.xml: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin: Changeset wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin      [exec] DEBUG 29/07/14 4:01 PM: liquibase: wcpu.msr.changelog.xml: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin: Reading ChangeSet: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin      [exec] DEBUG 29/07/14 4:01 PM: liquibase: wcpu.msr.changelog.xml: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin: Executing Statement: liquibase.statement.core.RawSqlStatement      [exec] DEBUG 29/07/14 4:01 PM: liquibase: wcpu.msr.changelog.xml: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin: Executing EXECUTE database command: create or replace java source named "T" as      [exec] public class T / :1      [exec]    String x      [exec] SEVERE 29/07/14 4:01 PM: liquibase: wcpu.msr.changelog.xml: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin: Change Set wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin failed.  Error: Error executing SQL create or replace java source named "T" as      [exec] public class T / :1      [exec]    String x: ORA-29536: badly formed source: Encountered "/" at line 1, column 16.      [exec] Was expecting one of:      [exec]     "extends" ...      [exec]     "implements" ...      [exec]     "{" ...      [exec]          [exec]      [exec] liquibase.exception.DatabaseException: Error executing SQL create or replace java source named "T" as      [exec] public class T / :1      [exec]    String x: ORA-29536: badly formed source: Encountered "/" at line 1, column 16.      [exec] Was expecting one of:      [exec]     "extends" ...      [exec]     "implements" ...      [exec]     "{" ...      [exec]          [exec]      [exec]  at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:62)      [exec]  at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:122)      [exec]  at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1206)      [exec]  at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1189)      [exec]  at liquibase.changelog.ChangeSet.execute(ChangeSet.java:528)      [exec]  at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:43)      [exec]  at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:70)      [exec]  at liquibase.Liquibase.update(Liquibase.java:195)      [exec]  at liquibase.Liquibase.update(Liquibase.java:174)      [exec]  at liquibase.integration.commandline.Main.doMigration(Main.java:997)      [exec]  at liquibase.integration.commandline.Main.run(Main.java:170)      [exec]  at liquibase.integration.commandline.Main.main(Main.java:89)      [exec] Caused by: java.sql.SQLException: ORA-29536: badly formed source: Encountered "/" at line 1, column 16.      [exec] Was expecting one of:      [exec]     "extends" ...      [exec]     "implements" ...      [exec]     "{" ...      [exec]          [exec]      [exec]  at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)      [exec]  at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)      [exec]  at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)      [exec]  at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)      [exec]  at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)      [exec]  at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)      [exec]  at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:194)      [exec]  at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:1000)      [exec]  at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)      [exec]  at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1882)      [exec]  at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1847)      [exec]  at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:301)      [exec]  at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:310)      [exec]  at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)      [exec]  ... 11 more      [exec] DEBUG 29/07/14 4:01 PM: liquibase: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin: Release Database Lock      [exec] DEBUG 29/07/14 4:01 PM: liquibase: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin: Executing UPDATE database command: UPDATE WCPU.DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1      [exec] INFO 29/07/14 4:01 PM: liquibase: wcpu.java.changelog.xml::TQIMsgIDGenerator.java.sql::Andrew Hukin: Successfully released change log lock
I've tried using SQLFILE but it's no better.

Any ideas?

Many thanks
Andrew

Hmmm … it seemed to me that the {'s are being stripped before the SQL is executed but I could have that wrong as I’ve only just had a quick glnce at the Liquibase code.

I can’t find anything re the drivers and braces other than the standard JDBC escape processing.

Andrew