com.continuent.tungsten.replicator.filter
Class SetToStringFilter

java.lang.Object
  extended by com.continuent.tungsten.replicator.filter.EnumToStringFilter
      extended by com.continuent.tungsten.replicator.filter.SetToStringFilter
All Implemented Interfaces:
Filter, ReplicatorPlugin

public class SetToStringFilter
extends EnumToStringFilter

SetToStringFilter transforms MySQL SET data type values to corresponding string representation as follows:
1. On each event it checks whether targeted table has SET data type column.
2. If it does, corresponding SET column values of the event are mapped from integer (bitmap) into string representations.

The filter is to be used with row replication.

Filter takes an optional parameter for performance tuning. Instead of checking all the tables you may define only a specific comma-delimited list in process_tables_schemas parameter. Eg.:
replicator.filter.settostringfilter.process_tables_schemas=myschema.mytable1 ,myschema.mytable2

This class is heavily based on EnumToStringFilter - only the core is overridden.

Version:
1.0
Author:
Linas Virbalas

Constructor Summary
SetToStringFilter()
           
 
Method Summary
static java.lang.String binarySetMapToString(java.lang.String[] setDefs, long currentValue)
          Transforms a binary map encoded in a long type, eg.:
011101
to a string with a comma-separated list of corresponding values, above eg.: a,c,d,e
protected  void checkForListType(OneRowChange orc)
          Overriding EnumToStringFilter core to check for SET columns in the event.
static int largestElementLen(java.lang.String setDefinition)
          Utility method for external callers.
protected  java.lang.String[] parseListType(java.lang.String listTypeDefinition)
          Overriding EnumToStringFilter core to parse SET definition.
static java.lang.String[] parseSet(java.lang.String setDefinition)
          Parses MySQL SET type definition statement.
protected  void transformColumns(java.util.ArrayList<OneRowChange.ColumnSpec> columns, java.util.ArrayList<java.util.ArrayList<OneRowChange.ColumnVal>> columnValues, java.util.HashMap<java.lang.Integer,java.lang.String[]> setDefinitions, java.lang.String typeCaption)
          Overriding EnumToStringFilter core to transform SET column values to comma separated string representation.
 
Methods inherited from class com.continuent.tungsten.replicator.filter.EnumToStringFilter
checkForListType, configure, filter, largestElement, largestElementLen, parseEnumeration, parseListDefString, prepare, release, setPassword, setProcessTablesSchemas, setUrl, setUser
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SetToStringFilter

public SetToStringFilter()
Method Detail

parseListType

protected java.lang.String[] parseListType(java.lang.String listTypeDefinition)
Overriding EnumToStringFilter core to parse SET definition.

Overrides:
parseListType in class EnumToStringFilter
See Also:
parseSet(String)

largestElementLen

public static int largestElementLen(java.lang.String setDefinition)
Utility method for external callers.

Parameters:
setDefinition - String of the following form: set('val1','val2',...)
Returns:
Length of the largest element in given SET definition.

checkForListType

protected void checkForListType(OneRowChange orc)
                         throws java.sql.SQLException,
                                ReplicatorException
Overriding EnumToStringFilter core to check for SET columns in the event. If found, transforms values from integers to corresponding strings.

Overrides:
checkForListType in class EnumToStringFilter
Throws:
java.sql.SQLException
ReplicatorException

transformColumns

protected void transformColumns(java.util.ArrayList<OneRowChange.ColumnSpec> columns,
                                java.util.ArrayList<java.util.ArrayList<OneRowChange.ColumnVal>> columnValues,
                                java.util.HashMap<java.lang.Integer,java.lang.String[]> setDefinitions,
                                java.lang.String typeCaption)
                         throws ReplicatorException
Overriding EnumToStringFilter core to transform SET column values to comma separated string representation.

Overrides:
transformColumns in class EnumToStringFilter
Throws:
ReplicatorException

parseSet

public static java.lang.String[] parseSet(java.lang.String setDefinition)
Parses MySQL SET type definition statement. Eg.:
set('a','b','c','d','e','f','g')

Parameters:
setDefinition - String of the following form: set('val1','val2',...)
Returns:
Set elements in an array. Unquoted. Eg.: a,b,c

binarySetMapToString

public static java.lang.String binarySetMapToString(java.lang.String[] setDefs,
                                                    long currentValue)
Transforms a binary map encoded in a long type, eg.:
011101
to a string with a comma-separated list of corresponding values, above eg.: a,c,d,e

Parameters:
setDefs - String values of each bit. For the above example: a,b,c,d,e,f.
currentValue - A bitmap to decode.
Returns:
A comma-separated list of decoded values, eg.: "a,c,d,e".
See Also:
MySQL SET type