You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/10/31 09:48:39 UTC

[james-project] 01/06: JAMES-2929 JDBCMailRepository broken: SQL and JDBC code out of sync

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 4a4a2d6b8d93c884830144cd302cb50d5d2276bc
Author: Joerg Thomas <jo...@consol.de>
AuthorDate: Wed Oct 30 17:01:50 2019 +0100

    JAMES-2929 JDBCMailRepository broken: SQL and JDBC code out of sync
---
 .../run/spring/destination/conf/sqlResources.xml   | 102 ++++++++++++++++++---
 server/app/src/main/resources/sqlResources.xml     |  39 +++++---
 .../src/test/resources/sqlResources-mail.xml       |  39 +++++---
 .../data-jdbc/src/test/resources/sqlResources.xml  |  40 ++++----
 4 files changed, 161 insertions(+), 59 deletions(-)

diff --git a/dockerfiles/run/spring/destination/conf/sqlResources.xml b/dockerfiles/run/spring/destination/conf/sqlResources.xml
index a5284d8..26cf914 100644
--- a/dockerfiles/run/spring/destination/conf/sqlResources.xml
+++ b/dockerfiles/run/spring/destination/conf/sqlResources.xml
@@ -17,8 +17,29 @@
   under the License.                                           
  -->
 
+<!--
+   This template file can be used as example for James Server configuration
+   DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS
+-->
+
+<!-- See http://james.apache.org/server/3/config.html for usage -->
+
 <sqlResources>
 
+<!--
+     This section provided configuration to determine the
+     database product which is being used for storage. Different database
+     products may require different SQL syntax.
+
+     The jdbc database connection is examined to see if it matches with the
+     regular expressions specified in any of the defined matchers. The matchers
+     are processed in the over provided here, with the first successful match
+     defining the "db" value for this connection.
+
+     This value is then used to choose between different definitions for various
+     named sql statements, defined below. If no match is found,
+     the default sql statements are used.
+-->
     <dbMatchers>
         <dbMatcher db="mssql" databaseProductName="microsoft sql server"/>
         <dbMatcher db="oracle" databaseProductName="oracle.*"/>
@@ -32,6 +53,32 @@
         <dbMatcher db="ingres" databaseProductName="ingres.*"/>
     </dbMatchers>
 
+<!--
+    With the following section it is possible to associate several name/value pairs
+        of options to a database product, identified by the "db" XML attribute name.
+
+    An element without a "db" attribute, if used for an option name, will become a default value for such option.
+    Each option may have a "default default", i.e. a default that applies if no element with an empty
+        "db" attribute (default element) exists as said above;
+        such default default must be documented for such option below.
+
+    The order of the XML elements is meaningless.
+
+    Here only "getBody" and "getAttributes" option names are set, but others could be used in the future.
+    Option names:
+        "getBody" - a string (case insensitive) telling which JDBC ResultSet method will be used to
+            get the message body field for a database product.
+            The default default value is "useBytes"..
+            Values (case insensitive):
+                "useBytes"  - use getBytes(int).
+                "useBlob"   - use getBlob(int).
+        "getAttributes" - a string (case insensitive) telling which JDBC ResultSet method will be used to
+            get the message attributes field for a database product.
+           The default default value is "useBytes"..
+            Values (case insensitive):
+                "useBytes"  - use getBytes(int).
+                "useBlob"   - use getBlob(int).
+-->
     <dbOptions>
         <dbOption name="getBody" value="useBytes"/>
         <dbOption name="getAttributes" value="useBytes"/>
@@ -57,6 +104,15 @@
         <dbOption db="ingres" name="getAttributes" value="useBytes"/>
     </dbOptions>
 
+<!-- SQL statements to use for various components. -->
+<!-- -->
+<!-- Parameter definitions ${param} are replaced with parameter values -->
+<!-- read from the configuration file. -->
+<!-- -->
+<!-- If a named statement has a definition defined for the current database product, -->
+<!-- then that statement is used. Otherwise the default statement is used. -->
+
+<!-- SQL statements for the JdbcMailRepository  -->
     <sqlDefs name="org.apache.james.mailrepository.jdbc.JDBCMailRepository">
 
         <!-- Statements used to check whether a particular message exists in this repository. -->
@@ -74,11 +130,11 @@
         <!-- Statements used to insert a message into this repository. -->
         <sql name="insertMessageSQL">INSERT INTO ${table} (message_name,
             repository_name, message_state, error_message, sender, recipients,
-            remote_host, remote_addr, last_updated, message_body,
-            message_attributes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
+    remote_host, remote_addr, per_recipient_headers, last_updated, message_body,
+    message_attributes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
 
         <!-- Statements used to retrieve a message stored in this repository. -->
-        <sql name="retrieveMessageSQL">SELECT message_state, error_message, sender, recipients, remote_host, remote_addr, last_updated FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
+    <sql name="retrieveMessageSQL">SELECT message_state, error_message, sender, recipients, remote_host, remote_addr, per_recipient_headers, last_updated FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
 
         <!-- Statements used to retrieve the body of a message stored in this repository. -->
         <sql name="retrieveMessageBodySQL">SELECT message_body FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
@@ -104,6 +160,9 @@
         <!-- Statements used to list all messages stored in this repository. -->
         <sql name="listMessagesSQL">SELECT message_name, message_state, last_updated FROM ${table} WHERE repository_name = ? ORDER BY last_updated ASC</sql>
 
+    <!-- Statements used to count messages stored in this repository. -->
+    <sql name="countMessagesSQL">SELECT COUNT(*) FROM ${table}</sql>
+
         <!-- Statements used to create the table associated with this class. -->
         <sql name="createTable" db="mysql">
             CREATE TABLE ${table} (
@@ -115,9 +174,10 @@
             recipients text NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers longblob NULL ,
+            last_updated datetime NOT NULL,
             message_body longblob NOT NULL ,
             message_attributes longblob NULL ,
-            last_updated datetime NOT NULL,
             PRIMARY KEY (repository_name, message_name)
             )
         </sql>
@@ -131,9 +191,10 @@
             recipients varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers varchar NULL ,
+            last_updated timestamp NOT NULL,
             message_body varchar NOT NULL ,
             message_attributes varchar NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
             )
         </sql>
@@ -147,9 +208,10 @@
             recipients varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers varchar NULL ,
+            last_updated timestamp NOT NULL,
             message_body varchar NOT NULL ,
             message_attributes varchar NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
             )
         </sql>
@@ -163,9 +225,10 @@
             [recipients] [text] NOT NULL ,
             [remote_host] [varchar] (255) NOT NULL ,
             [remote_addr] [varchar] (20) NOT NULL ,
+            [per_recipient_headers] [image] NULL ,
+            [last_updated] [datetime] NOT NULL,
             [message_body] [image] NOT NULL ,
             [message_attributes] [image] NULL ,
-            [last_updated] [datetime] NOT NULL,
             PRIMARY KEY (repository_name, message_name)
             )
         </sql>
@@ -179,9 +242,10 @@
             recipients varchar2(1000) NOT NULL ,
             remote_host varchar2(100) NOT NULL ,
             remote_addr varchar2(20) NOT NULL ,
+            per_recipient_headers blob NULL ,
+            last_updated date NOT NULL ,
             message_body blob NOT NULL ,
             message_attributes blob NULL ,
-            last_updated date NOT NULL ,
             PRIMARY KEY (repository_name, message_name)
             )
         </sql>
@@ -195,9 +259,10 @@
             recipients text NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers oid NULL ,
+            last_updated timestamp NOT NULL,
             message_body bytea NOT NULL ,
             message_attributes bytea NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
             )
         </sql>
@@ -211,9 +276,10 @@
             recipients long NOT NULL ,
             remote_host varchar (100) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers long byte NULL ,
+            last_updated date NOT NULL,
             message_body long byte NOT NULL ,
             message_attributes long byte NULL ,
-            last_updated date NOT NULL,
             PRIMARY KEY (repository_name, message_name)
             )
         </sql>
@@ -227,9 +293,10 @@
             recipients varchar(1000) NOT NULL ,
             remote_host varchar(100) NOT NULL ,
             remote_addr varchar(20) NOT NULL ,
+            per_recipient_headers blob ,
+            last_updated timestamp NOT NULL ,
             message_body blob NOT NULL ,
             message_attributes blob ,
-            last_updated timestamp NOT NULL ,
             PRIMARY KEY (repository_name, message_name)
             )
         </sql>
@@ -243,9 +310,10 @@
             recipients LONG VARCHAR NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers LONG BYTE ,
+            last_updated DATE NOT NULL
             message_body LONG BYTE NOT NULL ,
             message_attributes LONG BYTE ,
-            last_updated DATE NOT NULL
             )
         </sql>
         <sql name="createTable" db="derby">
@@ -258,14 +326,18 @@
             recipients long varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers blob ,
+            last_updated timestamp NOT NULL,
             message_body blob NOT NULL ,
             message_attributes blob ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
             )
         </sql>
     </sqlDefs>
 
+
+<!-- SQL statements to support the BayesianAnalysis and the BayesianAnalysisFeeder mailets -->
+<!-- -->
     <sqlDefs name="org.apache.james.util.bayesian.JDBCBayesianAnalyzer">
 
         <sql name="hamTableName">bayesiananalysis_ham</sql>
@@ -399,6 +471,8 @@
         </sql>
     </sqlDefs>
 
+<!-- SQL statements to support the WhiteListManager mailet and the IsInWhiteList matcher -->
+<!-- -->
     <sqlDefs name="WhiteList">
 
         <sql name="whiteListTableName">whitelist</sql>
@@ -589,6 +663,8 @@
 
     </sqlDefs>
 
+<!-- SQL statements to support the GreyList Handler-->
+<!-- -->
     <sqlDefs name="GreyList">
 
         <sql name="greyListTableName">greylist</sql>
diff --git a/server/app/src/main/resources/sqlResources.xml b/server/app/src/main/resources/sqlResources.xml
index 1e67b51..10d6c2b 100644
--- a/server/app/src/main/resources/sqlResources.xml
+++ b/server/app/src/main/resources/sqlResources.xml
@@ -130,11 +130,11 @@
     <!-- Statements used to insert a message into this repository. -->
     <sql name="insertMessageSQL">INSERT INTO ${table} (message_name,
     repository_name, message_state, error_message, sender, recipients,
-    remote_host, remote_addr, last_updated, message_body,
-    message_attributes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
+    remote_host, remote_addr, per_recipient_headers, last_updated, message_body,
+    message_attributes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
 
     <!-- Statements used to retrieve a message stored in this repository. -->
-    <sql name="retrieveMessageSQL">SELECT message_state, error_message, sender, recipients, remote_host, remote_addr, last_updated FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
+    <sql name="retrieveMessageSQL">SELECT message_state, error_message, sender, recipients, remote_host, remote_addr, per_recipient_headers, last_updated FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
 
     <!-- Statements used to retrieve the body of a message stored in this repository. -->
     <sql name="retrieveMessageBodySQL">SELECT message_body FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
@@ -160,6 +160,9 @@
     <!-- Statements used to list all messages stored in this repository. -->
     <sql name="listMessagesSQL">SELECT message_name, message_state, last_updated FROM ${table} WHERE repository_name = ? ORDER BY last_updated ASC</sql>
 
+    <!-- Statements used to count messages stored in this repository. -->
+    <sql name="countMessagesSQL">SELECT COUNT(*) FROM ${table}</sql>
+
     <!-- Statements used to create the table associated with this class. -->
     <sql name="createTable" db="mysql">
         CREATE TABLE ${table} (
@@ -171,9 +174,10 @@
             recipients text NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers longblob NULL ,
+            last_updated datetime NOT NULL,
             message_body longblob NOT NULL ,
             message_attributes longblob NULL ,
-            last_updated datetime NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -187,9 +191,10 @@
             recipients varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers varchar NULL ,
+            last_updated timestamp NOT NULL,
             message_body varchar NOT NULL ,
             message_attributes varchar NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -203,9 +208,10 @@
             recipients varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers varchar NULL ,
+            last_updated timestamp NOT NULL,
             message_body varchar NOT NULL ,
             message_attributes varchar NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -219,9 +225,10 @@
             [recipients] [text] NOT NULL ,
             [remote_host] [varchar] (255) NOT NULL ,
             [remote_addr] [varchar] (20) NOT NULL ,
+            [per_recipient_headers] [image] NULL ,
+            [last_updated] [datetime] NOT NULL,
             [message_body] [image] NOT NULL ,
             [message_attributes] [image] NULL ,
-            [last_updated] [datetime] NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -235,9 +242,10 @@
             recipients varchar2(1000) NOT NULL ,
             remote_host varchar2(100) NOT NULL ,
             remote_addr varchar2(20) NOT NULL ,
+            per_recipient_headers blob NULL ,
+            last_updated date NOT NULL ,
             message_body blob NOT NULL ,
             message_attributes blob NULL ,
-            last_updated date NOT NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -251,9 +259,10 @@
             recipients text NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers oid NULL ,
+            last_updated timestamp NOT NULL,
             message_body bytea NOT NULL ,
             message_attributes bytea NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -267,9 +276,10 @@
             recipients long NOT NULL ,
             remote_host varchar (100) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers long byte NULL ,
+            last_updated date NOT NULL,
             message_body long byte NOT NULL ,
             message_attributes long byte NULL ,
-            last_updated date NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -283,9 +293,10 @@
             recipients varchar(1000) NOT NULL ,
             remote_host varchar(100) NOT NULL ,
             remote_addr varchar(20) NOT NULL ,
+            per_recipient_headers blob ,
+            last_updated timestamp NOT NULL ,
             message_body blob NOT NULL ,
             message_attributes blob ,
-            last_updated timestamp NOT NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -299,9 +310,10 @@
             recipients LONG VARCHAR NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers LONG BYTE ,
+            last_updated DATE NOT NULL
             message_body LONG BYTE NOT NULL ,
             message_attributes LONG BYTE ,
-            last_updated DATE NOT NULL
         )
     </sql>
     <sql name="createTable" db="derby">
@@ -314,9 +326,10 @@
             recipients long varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers blob ,
+            last_updated timestamp NOT NULL,
             message_body blob NOT NULL ,
             message_attributes blob ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
diff --git a/server/data/data-jdbc/src/test/resources/sqlResources-mail.xml b/server/data/data-jdbc/src/test/resources/sqlResources-mail.xml
index 4e90638..4b17cff 100644
--- a/server/data/data-jdbc/src/test/resources/sqlResources-mail.xml
+++ b/server/data/data-jdbc/src/test/resources/sqlResources-mail.xml
@@ -115,11 +115,11 @@
     <!-- Statements used to insert a message into this repository. -->
     <sql name="insertMessageSQL">INSERT INTO ${table} (message_name,
     repository_name, message_state, error_message, sender, recipients,
-    remote_host, remote_addr, last_updated, message_body,
-    message_attributes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
+    remote_host, remote_addr, per_recipient_headers, last_updated, message_body,
+    message_attributes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
 
     <!-- Statements used to retrieve a message stored in this repository. -->
-    <sql name="retrieveMessageSQL">SELECT message_state, error_message, sender, recipients, remote_host, remote_addr, last_updated FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
+    <sql name="retrieveMessageSQL">SELECT message_state, error_message, sender, recipients, remote_host, remote_addr, per_recipient_headers, last_updated FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
 
     <!-- Statements used to retrieve the body of a message stored in this repository. -->
     <sql name="retrieveMessageBodySQL">SELECT message_body FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
@@ -145,6 +145,9 @@
     <!-- Statements used to list all messages stored in this repository. -->
     <sql name="listMessagesSQL">SELECT message_name, message_state, last_updated FROM ${table} WHERE repository_name = ? ORDER BY last_updated ASC</sql>
 
+    <!-- Statements used to count messages stored in this repository. -->
+    <sql name="countMessagesSQL">SELECT COUNT(*) FROM ${table}</sql>
+
     <!-- Statements used to create the table associated with this class. -->
     <sql name="createTable" db="mysql">
         CREATE TABLE ${table} (
@@ -156,9 +159,10 @@
             recipients text NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers longblob NULL ,
+            last_updated datetime NOT NULL,
             message_body longblob NOT NULL ,
             message_attributes longblob NULL ,
-            last_updated datetime NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -172,9 +176,10 @@
             recipients varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers varchar NULL ,
+            last_updated timestamp NOT NULL,
             message_body varchar NOT NULL ,
             message_attributes varchar NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -188,9 +193,10 @@
             recipients varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers varchar NULL ,
+            last_updated timestamp NOT NULL,
             message_body varchar NOT NULL ,
             message_attributes varchar NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -204,9 +210,10 @@
             [recipients] [text] NOT NULL ,
             [remote_host] [varchar] (255) NOT NULL ,
             [remote_addr] [varchar] (20) NOT NULL ,
+            [per_recipient_headers] [image] NULL ,
+            [last_updated] [datetime] NOT NULL,
             [message_body] [image] NOT NULL ,
             [message_attributes] [image] NULL ,
-            [last_updated] [datetime] NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -220,9 +227,10 @@
             recipients varchar2(1000) NOT NULL ,
             remote_host varchar2(100) NOT NULL ,
             remote_addr varchar2(20) NOT NULL ,
+            per_recipient_headers blob NULL ,
+            last_updated date NOT NULL ,
             message_body blob NOT NULL ,
             message_attributes blob NULL ,
-            last_updated date NOT NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -236,9 +244,10 @@
             recipients text NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers oid NULL ,
+            last_updated timestamp NOT NULL,
             message_body bytea NOT NULL ,
             message_attributes bytea NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -252,9 +261,10 @@
             recipients long NOT NULL ,
             remote_host varchar (100) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers long byte NULL ,
+            last_updated date NOT NULL,
             message_body long byte NOT NULL ,
             message_attributes long byte NULL ,
-            last_updated date NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -268,9 +278,10 @@
             recipients varchar(1000) NOT NULL ,
             remote_host varchar(100) NOT NULL ,
             remote_addr varchar(20) NOT NULL ,
+            per_recipient_headers blob ,
+            last_updated timestamp NOT NULL ,
             message_body blob NOT NULL ,
             message_attributes blob ,
-            last_updated timestamp NOT NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -284,9 +295,10 @@
             recipients LONG VARCHAR NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers LONG BYTE ,
+            last_updated DATE NOT NULL
             message_body LONG BYTE NOT NULL ,
             message_attributes LONG BYTE ,
-            last_updated DATE NOT NULL
         )
     </sql>
     <sql name="createTable" db="derby">
@@ -299,9 +311,10 @@
             recipients long varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers blob ,
+            last_updated timestamp NOT NULL,
             message_body blob NOT NULL ,
             message_attributes blob ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
diff --git a/server/data/data-jdbc/src/test/resources/sqlResources.xml b/server/data/data-jdbc/src/test/resources/sqlResources.xml
index 3d6d9f9..f1daca9 100644
--- a/server/data/data-jdbc/src/test/resources/sqlResources.xml
+++ b/server/data/data-jdbc/src/test/resources/sqlResources.xml
@@ -166,10 +166,10 @@
             recipients text NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
-            message_body longblob NOT NULL ,
-            message_attributes longblob NULL ,
             per_recipient_headers longblob NULL ,
             last_updated datetime NOT NULL,
+            message_body longblob NOT NULL ,
+            message_attributes longblob NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -183,10 +183,10 @@
             recipients varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
-            message_body varchar NOT NULL ,
-            message_attributes varchar NULL ,
             per_recipient_headers varchar NULL ,
             last_updated timestamp NOT NULL,
+            message_body varchar NOT NULL ,
+            message_attributes varchar NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -200,10 +200,10 @@
             recipients varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
-            message_body varchar NOT NULL ,
-            message_attributes varchar NULL ,
             per_recipient_headers varchar NULL ,
             last_updated timestamp NOT NULL,
+            message_body varchar NOT NULL ,
+            message_attributes varchar NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -217,10 +217,10 @@
             [recipients] [text] NOT NULL ,
             [remote_host] [varchar] (255) NOT NULL ,
             [remote_addr] [varchar] (20) NOT NULL ,
-            [message_body] [image] NOT NULL ,
-            [message_attributes] [image] NULL ,
             [per_recipient_headers] [image] NULL ,
             [last_updated] [datetime] NOT NULL,
+            [message_body] [image] NOT NULL ,
+            [message_attributes] [image] NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -234,10 +234,10 @@
             recipients varchar2(1000) NOT NULL ,
             remote_host varchar2(100) NOT NULL ,
             remote_addr varchar2(20) NOT NULL ,
-            message_body blob NOT NULL ,
-            message_attributes blob NULL ,
             per_recipient_headers blob NULL ,
             last_updated date NOT NULL ,
+            message_body blob NOT NULL ,
+            message_attributes blob NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -251,10 +251,10 @@
             recipients text NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
+            per_recipient_headers oid NULL ,
+            last_updated timestamp NOT NULL,
             message_body bytea NOT NULL ,
             message_attributes bytea NULL ,
-            per_recipient_headers bytea NULL ,
-            last_updated timestamp NOT NULL,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -268,10 +268,10 @@
             recipients long NOT NULL ,
             remote_host varchar (100) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
-            message_body long byte NOT NULL ,
-            message_attributes long byte NULL ,
             per_recipient_headers long byte NULL ,
             last_updated date NOT NULL,
+            message_body long byte NOT NULL ,
+            message_attributes long byte NULL ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -285,10 +285,10 @@
             recipients varchar(1000) NOT NULL ,
             remote_host varchar(100) NOT NULL ,
             remote_addr varchar(20) NOT NULL ,
-            message_body blob NOT NULL ,
-            message_attributes blob ,
             per_recipient_headers blob ,
             last_updated timestamp NOT NULL ,
+            message_body blob NOT NULL ,
+            message_attributes blob ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>
@@ -302,10 +302,10 @@
             recipients LONG VARCHAR NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
-            message_body LONG BYTE NOT NULL ,
-            message_attributes LONG BYTE ,
             per_recipient_headers LONG BYTE ,
             last_updated DATE NOT NULL
+            message_body LONG BYTE NOT NULL ,
+            message_attributes LONG BYTE ,
         )
     </sql>
     <sql name="createTable" db="derby">
@@ -318,10 +318,10 @@
             recipients long varchar NOT NULL ,
             remote_host varchar (255) NOT NULL ,
             remote_addr varchar (20) NOT NULL ,
-            message_body blob NOT NULL ,
-            message_attributes blob ,
             per_recipient_headers blob ,
             last_updated timestamp NOT NULL,
+            message_body blob NOT NULL ,
+            message_attributes blob ,
             PRIMARY KEY (repository_name, message_name)
         )
     </sql>


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org