Skip to content

Commit

Permalink
start support of BLOB -- we will assume it contains character data fo…
Browse files Browse the repository at this point in the history
…r now
  • Loading branch information
erilong committed Oct 16, 2007
1 parent 6e2cedf commit c1bb776
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 15 deletions.
Expand Up @@ -54,6 +54,8 @@ public class SqlTemplate {
String datetimeColumnTemplate;

String clobColumnTemplate;

String blobColumnTemplate;

String triggerConcatCharacter;

Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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;
}
}
10 changes: 9 additions & 1 deletion symmetric/src/main/resources/mysql-transactionid.sql
Expand Up @@ -15,4 +15,12 @@ create function fn_transaction_id()
return null;
end if;
end
/
/
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
/
23 changes: 22 additions & 1 deletion symmetric/src/main/resources/oracle-transactionid.sql
Expand Up @@ -20,4 +20,25 @@ CREATE OR REPLACE package body pack_symmetric as
pack_symmetric.disable_trigger:=a;
end;
end pack_symmetric;
/
/
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;
/

31 changes: 19 additions & 12 deletions symmetric/src/main/resources/symmetric-dialects.xml
Expand Up @@ -22,6 +22,12 @@
<bean class="org.jumpmind.symmetric.db.SqlTemplate">
<property name="triggerPrefix" value="${symmetric.runtime.trigger.prefix}" />
<property name="stringColumnTemplate" ref="mysqlStringTemplate" />
<property name="clobColumnTemplate" ref="mysqlStringTemplate" />
<property name="blobColumnTemplate">
<value>
<![CDATA[fn_sym_blob2clob($(tableAlias).$(columnName)),',',]]>
</value>
</property>
<property name="numberColumnTemplate">
<value>
<![CDATA[coalesce(cast($(tableAlias).$(columnName) as char), ''),',',]]>
Expand All @@ -35,7 +41,7 @@
</property>
<property name="triggerConcatCharacter" value=","/>
<property name="newTriggerValue" value="new"/>
<property name="oldTriggerValue" value="old"/>
<property name="oldTriggerValue" value="old"/>
<property name="sqlTemplates">
<map>
<entry key="insertTriggerTemplate">
Expand Down Expand Up @@ -117,12 +123,10 @@
<![CDATA[select concat($(columns)) from $(schemaName)$(tableName) t where $(whereClause)]]>
</value>
</entry>

</map>
</property>
</bean>
</property>

</bean>

<bean id="oracleDialect" class="org.jumpmind.symmetric.db.oracle.OracleDbDialect"
Expand All @@ -133,28 +137,33 @@
<bean class="org.jumpmind.symmetric.db.SqlTemplate">
<property name="triggerPrefix" value="${symmetric.runtime.trigger.prefix}" />
<property name="stringColumnTemplate" >
<value>
<value>
<![CDATA[ case when $(tableAlias).$(columnName) is null then '' else concat(concat('"',replace(replace($(tableAlias).$(columnName),'\\','\\\\'),'"','\\"')),'"') end ||','||]]>
</value>
</value>
</property>
<property name="clobColumnTemplate">
<property name="clobColumnTemplate">
<value>
<![CDATA[concat(concat('"',replace(replace($(tableAlias).$(columnName),to_clob('\\'),to_clob('\\')),to_clob('"'),to_clob('\\"'))),'"') ||','||]]>
</value>
</property>
<property name="blobColumnTemplate">
<value>
<![CDATA[fn_sym_blob2clob($(tableAlias).$(columnName))||','||]]>
</value>
</property>
<property name="numberColumnTemplate">
<value>
<![CDATA[coalesce(cast($(tableAlias).$(columnName) as varchar(50)), '')||','||]]>
</value>
</property>
<property name="triggerConcatCharacter" value="||"/>
<property name="newTriggerValue" value=":new"/>
<property name="oldTriggerValue" value=":old"/>
<property name="newTriggerValue" value=":new"/>
<property name="oldTriggerValue" value=":old"/>
<!-- TODO -->
<property name="datetimeColumnTemplate" >
<value>
<value>
<![CDATA[ case when $(tableAlias).$(columnName) is null then '' else concat(concat('"',to_char($(tableAlias).$(columnName), 'YYYY-MM-DD HH24:MI:SS')),'"') end ||','||]]>
</value>
</value>
</property>
<property name="sqlTemplates">
<map>
Expand Down Expand Up @@ -233,12 +242,10 @@
<![CDATA[select $(columns) from $(schemaName)$(tableName) t where $(whereClause)]]>
</value>
</entry>

</map>
</property>
</bean>
</property>

</bean>

</beans>

0 comments on commit c1bb776

Please sign in to comment.