CVS User Account cvsuser
Tue Nov 15 18:10:08 PST 2005
Log Message:
-----------
Support case-folding - Philip Yarra <philip at utiba.com>

I figure the easiest way to explain what I propose wrt. case-folding is to 
supply a patch. No changes to the DB functions, just a small change in 
slon_tools.pm and slonik_create_set.pl

If you define:
foldCase => 1,
in slon_tools.conf, object names (including schema - wasn't sure if that was 
wise or not) will be folded to lower case. 

The default is 0, so no change to existing behaviour unless you specifically 
say so. 

I also changed 'table1' -> 'TABLE1' in the sample conf to illustrate the 
difference.

Modified Files:
--------------
    slony1-engine/tools/altperl:
        slon-tools.pm (r1.25 -> r1.26)
        slon_tools.conf-sample (r1.6 -> r1.7)
        slonik_create_set.pl (r1.2 -> r1.3)

-------------- next part --------------
Index: slon-tools.pm
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tools/altperl/slon-tools.pm,v
retrieving revision 1.25
retrieving revision 1.26
diff -Ltools/altperl/slon-tools.pm -Ltools/altperl/slon-tools.pm -u -w -r1.25 -r1.26
--- tools/altperl/slon-tools.pm
+++ tools/altperl/slon-tools.pm
@@ -246,6 +246,7 @@
     %KEYEDTABLES  = %{$match->{"keyedtables"}};
     @SERIALTABLES = @{$match->{"serialtables"}};
     @SEQUENCES    = @{$match->{"sequences"}};
+    $FOLD_CASE    = ($match->{"foldCase"} or 0);
 
     return $match->{"set_id"};
 }
Index: slonik_create_set.pl
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tools/altperl/slonik_create_set.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ltools/altperl/slonik_create_set.pl -Ltools/altperl/slonik_create_set.pl -u -w -r1.2 -r1.3
--- tools/altperl/slonik_create_set.pl
+++ tools/altperl/slonik_create_set.pl
@@ -1,4 +1,5 @@
 #!@@PERL@@
+
 # $Id$
 # Author: Christopher Browne
 # Copyright 2004 Afilias Canada
@@ -42,6 +43,7 @@
 print SLONIK "# TABLE ADD KEY\n";
 foreach my $table (@SERIALTABLES) {
     $table = ensure_namespace($table);
+    $table = lc($table) if $FOLD_CASE;
     print SLONIK "  echo '  Adding unique key to table $table...';\n";
     print SLONIK "  table add key (\n";
     print SLONIK "    node id = $SET_ORIGIN,\n";
@@ -69,6 +71,7 @@
 
 foreach my $table (@SERIALTABLES) {
     $table = ensure_namespace($table);
+	$table = lc($table) if $FOLD_CASE;
     print SLONIK "  set add table (set id = $SET_ID, origin = $SET_ORIGIN, id = $TABLE_ID,\n";
     print SLONIK "                 full qualified name = '$table', key=serial,\n";
     print SLONIK "                 comment = 'Table $table without primary key');\n";
@@ -78,6 +81,7 @@
 
 foreach my $table (@PKEYEDTABLES) {
     $table = ensure_namespace($table);
+	$table = lc($table) if $FOLD_CASE;
     print SLONIK "  set add table (set id = $SET_ID, origin = $SET_ORIGIN, id = $TABLE_ID,\n";
     print SLONIK "                 full qualified name = '$table',\n";
     print SLONIK "                 comment = 'Table $table with primary key');\n";
@@ -88,6 +92,7 @@
 foreach my $table (keys %KEYEDTABLES) {
     my $key = $KEYEDTABLES{$table};
     $table = ensure_namespace($table);
+	$table = lc($table) if $FOLD_CASE;
     print SLONIK "  set add table (set id = $SET_ID, origin = $SET_ORIGIN, id = $TABLE_ID,\n";
     print SLONIK "                 full qualified name = '$table', key='$key',\n";
     print SLONIK "                 comment = 'Table $table with candidate primary key $key');\n";
@@ -103,6 +108,7 @@
 $SEQUENCE_ID = 1 if $SEQUENCE_ID < 1;
 foreach my $seq (@SEQUENCES) {
     $seq = ensure_namespace($seq);
+	$seq = lc($seq) if $FOLD_CASE;
     print SLONIK "  set add sequence (set id = $SET_ID, origin = $SET_ORIGIN, id = $SEQUENCE_ID,\n";
     print SLONIK "                    full qualified name = '$seq',\n";
     print SLONIK "                    comment = 'Sequence $seq');\n";
Index: slon_tools.conf-sample
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tools/altperl/slon_tools.conf-sample,v
retrieving revision 1.6
retrieving revision 1.7
diff -Ltools/altperl/slon_tools.conf-sample -Ltools/altperl/slon_tools.conf-sample -u -w -r1.6 -r1.7
--- tools/altperl/slon_tools.conf-sample
+++ tools/altperl/slon_tools.conf-sample
@@ -94,6 +94,16 @@
 	#
 	# "origin" => 1,
 
+	# If this is set to 1, table and sequence names will be folded to lower-case
+	# to match the way that PostgreSQL handles unquoted names.
+	# For example, CREATE TABLE ACCOUNT(...) actually turns into CREATE TABLE account(...);
+	# unless you put quotes around the table name
+	# Slony always quotes object names, so you may get a mis-match between the table-name
+	# as PostgreSQL understands it, and as Slony represents it.
+	# default value is 0
+	#
+	# foldCase => 0,
+
 	# The first ID to use for tables and sequences that are added
 	# to the replication cluster.  This must be unique across the
 	# cluster.
@@ -108,7 +118,7 @@
 	# This array contains a list of tables that already have
 	# primary keys.
         "pkeyedtables" => [
-			   'table1',
+			   'TABLE1',
 			   'table2',
 			   ],
 


More information about the Slony1-commit mailing list