DB reader node vs. Informix 10 ODBC?

Dear KNIMErs,

Is there any known issue with the DB reader node affecting Informix 10 ODBC access? Queries working fine in Business Objects, Server Studio, SQuirreL and Access would only produce the following in KNIME:

[Informix][Informix ODBC Driver][Informix]A syntax error has occurred. WARN Database Reader java.sql.SQLException: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred.

:frowning:

Any hints?

Thanks,
E.

Hi E.,
I don’t know about any problems, admittedly I haven’t tested our database nodes on an Informix database. The message you have posted looks like a warning (WARN), but not an error (ERROR). Is this node still yellow or red after configure/execute? Do you also have a stacktrace that you could send me; if possible also the SQL query your are trying to execute.
Cheers, Thomas

My apologies, I left something out:

WARN DatabaseReaderConnection PreparedStatment not support by database: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. WARN Database Reader java.sql.SQLException: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred.  

Any query will produce this error, the query leading to the one I pasted above simply was:

select count(*) from vbaudit;

 
I’ll go look for the stack trace data now, wish me luck. :slight_smile:
 
Thanks,
E.

Got it, sorry for the delay:

DEBUG NodeContainer Conversions 0:3 has new state: IDLE DEBUG NodeContainer Setting dirty flag on Database Reader 0:3:8 DEBUG NodeContainer Setting dirty flag on Conversions 0:3 DEBUG KnimeResourceNavigator ROOT's workflow has changed WORKFLOW_DIRTY DEBUG WorkflowEditor Workflow event triggered: WorkflowEvent [type=WORKFLOW_DIRTY;node=0:3;old=null;new=null;timestamp=Jan 22, 2010 6:09:12 PM] DEBUG WorkflowRootEditPart WorkflowRoot: workflow changed, refreshing children/connections.. WARN Database Reader java.sql.SQLException: javax.crypto.BadPaddingException: Given final block not properly padded DEBUG Database Reader java.sql.SQLException: javax.crypto.BadPaddingException: Given final block not properly padded org.knime.core.node.InvalidSettingsException: java.sql.SQLException: javax.crypto.BadPaddingException: Given final block not properly padded at org.knime.base.node.io.database.DBReaderNodeModel.configure(DBReaderNodeModel.java:187) at org.knime.core.node.NodeModel.configure(NodeModel.java:928) at org.knime.core.node.NodeModel.configureModel(NodeModel.java:878) at org.knime.core.node.Node.configure(Node.java:1252) at org.knime.core.node.workflow.SingleNodeContainer.nodeConfigure(SingleNodeContainer.java:410) at org.knime.core.node.workflow.SingleNodeContainer.configure(SingleNodeContainer.java:333) at org.knime.core.node.workflow.WorkflowManager.configureSingleNodeContainer(WorkflowManager.java:3019) at org.knime.core.node.workflow.WorkflowManager.configureNodeAndSuccessors(WorkflowManager.java:3152) at org.knime.core.node.workflow.WorkflowManager.loadNodeSettings(WorkflowManager.java:1016) at org.knime.core.node.workflow.NodeContainer.applySettingsFromDialog(NodeContainer.java:896) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.doApply(WrappedNodeDialog.java:378) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.doOK(WrappedNodeDialog.java:329) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.access$3(WrappedNodeDialog.java:327) at org.knime.workbench.ui.wrapper.WrappedNodeDialog$4.widgetSelected(WrappedNodeDialog.java:301) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.open(WrappedNodeDialog.java:146) at org.knime.workbench.editor2.actions.OpenDialogAction.runOnNodes(OpenDialogAction.java:153) at org.knime.workbench.editor2.actions.AbstractNodeAction$1.run(AbstractNodeAction.java:138) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:178) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150) at org.eclipse.swt.widgets.Display.syncExec(Display.java:4251) at org.knime.workbench.editor2.actions.AbstractNodeAction.run(AbstractNodeAction.java:135) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:583) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:500) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2384) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2348) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:490) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.knime.product.rcp.KNIMEApplication.start(KNIMEApplication.java:112) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) Caused by: java.sql.SQLException: javax.crypto.BadPaddingException: Given final block not properly padded at org.knime.core.node.port.database.DatabaseReaderConnection.getDataTableSpec(DatabaseReaderConnection.java:187) at org.knime.base.node.io.database.DBReaderNodeModel.configure(DBReaderNodeModel.java:180) ... 55 more Caused by: javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..) at javax.crypto.Cipher.doFinal(DashoA13*..) at org.knime.core.util.KnimeEncryption.decrypt(KnimeEncryption.java:188) at org.knime.core.util.KnimeEncryption.decrypt(KnimeEncryption.java:163) at org.knime.core.node.port.database.DatabaseConnectionSettings.createConnection(DatabaseConnectionSettings.java:205) at org.knime.core.node.port.database.DatabaseReaderConnection.getDataTableSpec(DatabaseReaderConnection.java:153) ... 56 more DEBUG NodeContainer Database Reader 0:3:8 has new state: IDLE DEBUG NodeContainer Conversions 0:3 has new state: IDLE

Hi,
Given final block not properly padded means that either the password or the masterkey is wrong… Can you please double-check that both phrases are entered correctly. Sorry, for this meaningless error message, we are going to fix that for KNIME 2.2. Please let me know, if it is working now!
Cheers, Thomas

Hi Thomas,

Thanks for that hint, I suspected as much… Is there any way to reset and/or to skip the master key requirement entirely? It has done more harm than good so far, given that internally we use very generic connection values not worthy of any protection.

Thanks once more
E.

Hi E.,
sure, in the KNIME preference page “Master Key” you can disable the master key en-/decryption. Sorry for this hassle, we are currently working on a better solution for propagating credential (user/password) through the pipeline.
Cheers, Thomas

Hi Thomas,

Thanks for the hint! However, I’m afraid it still won’t work - see new stack trace below, obtained after disabling the Master Key and restarting KNIME:

DEBUG OpenDialogAction Opening node dialog... DEBUG NodeContainer Conversions 0:0 has new state: IDLE DEBUG DatabaseConnectionSettings Opening database connection to "jdbc:odbc:COPYPROD"... WARN DatabaseReaderConnection PreparedStatment not support by database: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. DEBUG DatabaseReaderConnection PreparedStatment not support by database: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. java.sql.SQLException: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114) at sun.jdbc.odbc.JdbcOdbc.SQLPrepare(JdbcOdbc.java:4830) at sun.jdbc.odbc.JdbcOdbcConnection.prepareStatement(JdbcOdbcConnection.java:475) at sun.jdbc.odbc.JdbcOdbcConnection.prepareStatement(JdbcOdbcConnection.java:443) at org.knime.core.node.port.database.DatabaseReaderConnection.getDataTableSpec(DatabaseReaderConnection.java:156) at org.knime.base.node.io.database.DBReaderNodeModel.configure(DBReaderNodeModel.java:180) at org.knime.core.node.NodeModel.configure(NodeModel.java:928) at org.knime.core.node.NodeModel.configureModel(NodeModel.java:878) at org.knime.core.node.Node.configure(Node.java:1252) at org.knime.core.node.workflow.SingleNodeContainer.nodeConfigure(SingleNodeContainer.java:410) at org.knime.core.node.workflow.SingleNodeContainer.configure(SingleNodeContainer.java:333) at org.knime.core.node.workflow.WorkflowManager.configureSingleNodeContainer(WorkflowManager.java:3019) at org.knime.core.node.workflow.WorkflowManager.configureNodeAndSuccessors(WorkflowManager.java:3152) at org.knime.core.node.workflow.WorkflowManager.loadNodeSettings(WorkflowManager.java:1016) at org.knime.core.node.workflow.NodeContainer.applySettingsFromDialog(NodeContainer.java:896) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.doApply(WrappedNodeDialog.java:378) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.doOK(WrappedNodeDialog.java:329) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.access$3(WrappedNodeDialog.java:327) at org.knime.workbench.ui.wrapper.WrappedNodeDialog$4.widgetSelected(WrappedNodeDialog.java:301) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.open(WrappedNodeDialog.java:146) at org.knime.workbench.editor2.actions.OpenDialogAction.runOnNodes(OpenDialogAction.java:153) at org.knime.workbench.editor2.actions.AbstractNodeAction$1.run(AbstractNodeAction.java:138) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:178) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150) at org.eclipse.swt.widgets.Display.syncExec(Display.java:4251) at org.knime.workbench.editor2.actions.AbstractNodeAction.run(AbstractNodeAction.java:135) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:583) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:500) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2384) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2348) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:490) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.knime.product.rcp.KNIMEApplication.start(KNIMEApplication.java:112) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) WARN Database Reader java.sql.SQLException: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. DEBUG Database Reader java.sql.SQLException: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. org.knime.core.node.InvalidSettingsException: java.sql.SQLException: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. at org.knime.base.node.io.database.DBReaderNodeModel.configure(DBReaderNodeModel.java:187) at org.knime.core.node.NodeModel.configure(NodeModel.java:928) at org.knime.core.node.NodeModel.configureModel(NodeModel.java:878) at org.knime.core.node.Node.configure(Node.java:1252) at org.knime.core.node.workflow.SingleNodeContainer.nodeConfigure(SingleNodeContainer.java:410) at org.knime.core.node.workflow.SingleNodeContainer.configure(SingleNodeContainer.java:333) at org.knime.core.node.workflow.WorkflowManager.configureSingleNodeContainer(WorkflowManager.java:3019) at org.knime.core.node.workflow.WorkflowManager.configureNodeAndSuccessors(WorkflowManager.java:3152) at org.knime.core.node.workflow.WorkflowManager.loadNodeSettings(WorkflowManager.java:1016) at org.knime.core.node.workflow.NodeContainer.applySettingsFromDialog(NodeContainer.java:896) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.doApply(WrappedNodeDialog.java:378) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.doOK(WrappedNodeDialog.java:329) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.access$3(WrappedNodeDialog.java:327) at org.knime.workbench.ui.wrapper.WrappedNodeDialog$4.widgetSelected(WrappedNodeDialog.java:301) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.knime.workbench.ui.wrapper.WrappedNodeDialog.open(WrappedNodeDialog.java:146) at org.knime.workbench.editor2.actions.OpenDialogAction.runOnNodes(OpenDialogAction.java:153) at org.knime.workbench.editor2.actions.AbstractNodeAction$1.run(AbstractNodeAction.java:138) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:178) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150) at org.eclipse.swt.widgets.Display.syncExec(Display.java:4251) at org.knime.workbench.editor2.actions.AbstractNodeAction.run(AbstractNodeAction.java:135) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:583) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:500) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2384) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2348) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:490) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.knime.product.rcp.KNIMEApplication.start(KNIMEApplication.java:112) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) Caused by: java.sql.SQLException: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114) at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110) at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338) at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253) at org.knime.core.node.port.database.DatabaseReaderConnection.getDataTableSpec(DatabaseReaderConnection.java:165) at org.knime.base.node.io.database.DBReaderNodeModel.configure(DBReaderNodeModel.java:180) ... 55 more DEBUG NodeContainer Database Reader 0:0:8 has new state: IDLE DEBUG NodeContainer Conversions 0:0 has new state: IDLE

:frowning:

Any further ideas? Same problem as before: Node stays in red, only thing I’ll get is a warning (“WARN DatabaseReaderConnection PreparedStatment not support by database: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred.
WARN Database Reader java.sql.SQLException: [Informix][Informix ODBC Driver][Informix]A syntax error has occurred.”) and it simply won’t work. The DB nodes used to work in KINME 1.x, I should add.

Thanks for you patience with me,
E.

Hi E.,
I assume you are using KNIME 2.1.1? From your stacktrace I see only two warnings, one states that PreparedStatements are not supported which is fine, the other one is an syntax error in the SQL statement. Can you please try to re-enter the password in the dialog and see what the node does? Can you please check if this is a problem with a table alias, for example try to execute “SELECT * FROM mytable”, “(SELECT * FROM mytable) myalias”, or “(SELECT * FROM mytable) as myalias”. I currently have no clue where this error might come from.
Thanks again for your help!
Thomas

Hi E., some closer look into this issue showed that Informix databases do not support nested SQL statements. The solution is to use “table(multiset(…))” to wrap those queries. Since KNIME somehow auto-generates such statements, those are always surrounded by brackets. That means, this workaround does also not works in this case. Sorry, I need to check if I can find a general solution for this issue.
Thanks, Thomas