From c1bb7765f0085823b36c59ee427b011aefebb22e Mon Sep 17 00:00:00 2001 From: erilong Date: Tue, 16 Oct 2007 13:21:40 +0000 Subject: [PATCH] start support of BLOB -- we will assume it contains character data for now --- .../jumpmind/symmetric/db/SqlTemplate.java | 14 ++++++++- .../main/resources/mysql-transactionid.sql | 10 +++++- .../main/resources/oracle-transactionid.sql | 23 +++++++++++++- .../src/main/resources/symmetric-dialects.xml | 31 ++++++++++++------- 4 files changed, 63 insertions(+), 15 deletions(-) diff --git a/symmetric/src/main/java/org/jumpmind/symmetric/db/SqlTemplate.java b/symmetric/src/main/java/org/jumpmind/symmetric/db/SqlTemplate.java index 5e42d7b994..a8783072ef 100644 --- a/symmetric/src/main/java/org/jumpmind/symmetric/db/SqlTemplate.java +++ b/symmetric/src/main/java/org/jumpmind/symmetric/db/SqlTemplate.java @@ -54,6 +54,8 @@ public class SqlTemplate { String datetimeColumnTemplate; String clobColumnTemplate; + + String blobColumnTemplate; String triggerConcatCharacter; @@ -197,9 +199,11 @@ private String buildColumnString(String tableAlias, Column[] columns) { templateToUse = stringColumnTemplate; break; case Types.CLOB: - case Types.BLOB: templateToUse = clobColumnTemplate; break; + case Types.BLOB: + templateToUse = blobColumnTemplate; + break; case Types.BINARY: case Types.VARBINARY: case Types.LONGVARBINARY: @@ -295,4 +299,12 @@ public void setOldTriggerValue(String oldTriggerValue) { public void setTriggerPrefix(String triggerPrefix) { this.triggerPrefix = triggerPrefix; } + + public String getBlobColumnTemplate() { + return blobColumnTemplate; + } + + public void setBlobColumnTemplate(String blobColumnTemplate) { + this.blobColumnTemplate = blobColumnTemplate; + } } diff --git a/symmetric/src/main/resources/mysql-transactionid.sql b/symmetric/src/main/resources/mysql-transactionid.sql index 9b93e94ec2..5c576d6bbc 100644 --- a/symmetric/src/main/resources/mysql-transactionid.sql +++ b/symmetric/src/main/resources/mysql-transactionid.sql @@ -15,4 +15,12 @@ create function fn_transaction_id() return null; end if; end -/ \ No newline at end of file +/ +drop function fn_sym_blob2clob +/ +create function fn_sym_blob2clob(blob_in blob) + returns mediumtext + begin + return if(blob_in is null,'',concat('"',replace(replace(blob_in,'\\','\\\\'),'"','\\"'),'"')); + end +/ diff --git a/symmetric/src/main/resources/oracle-transactionid.sql b/symmetric/src/main/resources/oracle-transactionid.sql index 44a5c0da7d..2d560b3b3d 100644 --- a/symmetric/src/main/resources/oracle-transactionid.sql +++ b/symmetric/src/main/resources/oracle-transactionid.sql @@ -20,4 +20,25 @@ CREATE OR REPLACE package body pack_symmetric as pack_symmetric.disable_trigger:=a; end; end pack_symmetric; -/ \ No newline at end of file +/ +CREATE OR REPLACE FUNCTION fn_sym_blob2clob (blob_in IN BLOB) +RETURN CLOB +AS + v_clob CLOB; + v_varchar VARCHAR2(32767); + v_start PLS_INTEGER := 1; + v_buffer PLS_INTEGER := 32767; +BEGIN + DBMS_LOB.CREATETEMPORARY(v_clob, TRUE); + + FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer) + LOOP + v_varchar := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(blob_in, v_buffer, v_start)); + DBMS_LOB.WRITEAPPEND(v_clob, LENGTH(v_varchar), v_varchar); + v_start := v_start + v_buffer; + END LOOP; + + RETURN v_clob; +END fn_sym_blob2clob; +/ + diff --git a/symmetric/src/main/resources/symmetric-dialects.xml b/symmetric/src/main/resources/symmetric-dialects.xml index cee180f0e8..c0d169ef79 100644 --- a/symmetric/src/main/resources/symmetric-dialects.xml +++ b/symmetric/src/main/resources/symmetric-dialects.xml @@ -22,6 +22,12 @@ + + + + + + @@ -35,7 +41,7 @@ - + @@ -117,12 +123,10 @@ - - - + - + - + + + + + + - - + + - + - + @@ -233,12 +242,10 @@ - - \ No newline at end of file