Hello,

I'm sending part of the code that I've done and is available for reviewing
and I'm asking for your comments and some help because I'm new to
PostgreSQL.

Proposal: http://archives.postgresql.org/pgsql-hackers/2008-05/msg00857.php

The code contains changes of parser, pg_collation catalog, parsenodes.h for
CREATE COLLATION... and DROP COLLATION statements.

Questions that I would like to know answers:

1) Should I move DROP statement from DropCollationStmt to DropStmt? Some
statements are seperated and some are included in DropStmt? Is there any
reason for that?
2) What type should all names in CREATE and DROP statement in gram.y have?
I've chosen qualified_name but I know it's not the best choice.
3) All collations are created from existing collations. How do I ensure that
the collation already exists? Is there any possibility to define it in
gram.y?
4) For further functionality development is there anything more needed than
adding T_CreateCollationStmt and T_DropCollationStmt to
/src/backend/tcop/utility.c, and write functionality into collation.c?
5) Also can you look at the pg_catalog and tell me if anything is wrong with
it?

Thank you for all your replies in advance.

Regards

Radek Strnad
Index: backend/parser/keywords.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/keywords.c,v
retrieving revision 1.194
diff -c -r1.194 keywords.c
*** backend/parser/keywords.c	1 Jan 2008 19:45:50 -0000	1.194
--- backend/parser/keywords.c	1 Jul 2008 14:29:26 -0000
***************
*** 33,38 ****
--- 33,39 ----
  	/* name, value, category */
  	{"abort", ABORT_P, UNRESERVED_KEYWORD},
  	{"absolute", ABSOLUTE_P, UNRESERVED_KEYWORD},
+ 	{"accent", ACCENT, UNRESERVED_KEYWORD},
  	{"access", ACCESS, UNRESERVED_KEYWORD},
  	{"action", ACTION, UNRESERVED_KEYWORD},
  	{"add", ADD_P, UNRESERVED_KEYWORD},
***************
*** 81,87 ****
  	{"close", CLOSE, UNRESERVED_KEYWORD},
  	{"cluster", CLUSTER, UNRESERVED_KEYWORD},
  	{"coalesce", COALESCE, COL_NAME_KEYWORD},
! 	{"collate", COLLATE, RESERVED_KEYWORD},
  	{"column", COLUMN, RESERVED_KEYWORD},
  	{"comment", COMMENT, UNRESERVED_KEYWORD},
  	{"commit", COMMIT, UNRESERVED_KEYWORD},
--- 82,89 ----
  	{"close", CLOSE, UNRESERVED_KEYWORD},
  	{"cluster", CLUSTER, UNRESERVED_KEYWORD},
  	{"coalesce", COALESCE, COL_NAME_KEYWORD},
! 	{"collate", COLLATE, UNRESERVED_KEYWORD},
! 	{"collation", COLLATION, UNRESERVED_KEYWORD},
  	{"column", COLUMN, RESERVED_KEYWORD},
  	{"comment", COMMENT, UNRESERVED_KEYWORD},
  	{"commit", COMMIT, UNRESERVED_KEYWORD},
***************
*** 206,211 ****
--- 208,215 ----
  	{"language", LANGUAGE, UNRESERVED_KEYWORD},
  	{"large", LARGE_P, UNRESERVED_KEYWORD},
  	{"last", LAST_P, UNRESERVED_KEYWORD},
+ 	{"lccollate", LCCOLLATE, UNRESERVED_KEYWORD},
+ 	{"lcctype", LCCTYPE, UNRESERVED_KEYWORD},
  	{"leading", LEADING, RESERVED_KEYWORD},
  	{"least", LEAST, COL_NAME_KEYWORD},
  	{"left", LEFT, TYPE_FUNC_NAME_KEYWORD},
***************
*** 270,275 ****
--- 274,280 ----
  	{"overlay", OVERLAY, COL_NAME_KEYWORD},
  	{"owned", OWNED, UNRESERVED_KEYWORD},
  	{"owner", OWNER, UNRESERVED_KEYWORD},
+ 	{"pad", PAD, UNRESERVED_KEYWORD},
  	{"parser", PARSER, UNRESERVED_KEYWORD},
  	{"partial", PARTIAL, UNRESERVED_KEYWORD},
  	{"password", PASSWORD, UNRESERVED_KEYWORD},
***************
*** 317,322 ****
--- 322,328 ----
  	{"second", SECOND_P, UNRESERVED_KEYWORD},
  	{"security", SECURITY, UNRESERVED_KEYWORD},
  	{"select", SELECT, RESERVED_KEYWORD},
+ 	{"sensitive", SENSITIVE, UNRESERVED_KEYWORD},
  	{"sequence", SEQUENCE, UNRESERVED_KEYWORD},
  	{"serializable", SERIALIZABLE, UNRESERVED_KEYWORD},
  	{"session", SESSION, UNRESERVED_KEYWORD},
***************
*** 329,334 ****
--- 335,341 ----
  	{"simple", SIMPLE, UNRESERVED_KEYWORD},
  	{"smallint", SMALLINT, COL_NAME_KEYWORD},
  	{"some", SOME, RESERVED_KEYWORD},
+ 	{"space", SPACE, UNRESERVED_KEYWORD},
  	{"stable", STABLE, UNRESERVED_KEYWORD},
  	{"standalone", STANDALONE_P, UNRESERVED_KEYWORD},
  	{"start", START, UNRESERVED_KEYWORD},
***************
*** 337,342 ****
--- 344,350 ----
  	{"stdin", STDIN, UNRESERVED_KEYWORD},
  	{"stdout", STDOUT, UNRESERVED_KEYWORD},
  	{"storage", STORAGE, UNRESERVED_KEYWORD},
+ 	{"strcolfn", STRCOLFN, UNRESERVED_KEYWORD},
  	{"strict", STRICT_P, UNRESERVED_KEYWORD},
  	{"strip", STRIP_P, UNRESERVED_KEYWORD},
  	{"substring", SUBSTRING, COL_NAME_KEYWORD},
Index: backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.605
diff -c -r2.605 gram.y
*** backend/parser/gram.y	1 Jan 2008 19:45:50 -0000	2.605
--- backend/parser/gram.y	1 Jul 2008 14:29:25 -0000
***************
*** 149,168 ****
  }
  
  %type <node>	stmt schema_stmt
! 		AlterDatabaseStmt AlterDatabaseSetStmt AlterDomainStmt AlterGroupStmt
! 		AlterObjectSchemaStmt AlterOwnerStmt AlterSeqStmt AlterTableStmt
! 		AlterUserStmt AlterUserSetStmt AlterRoleStmt AlterRoleSetStmt
! 		AnalyzeStmt ClosePortalStmt ClusterStmt CommentStmt
! 		ConstraintsSetStmt CopyStmt CreateAsStmt CreateCastStmt
! 		CreateDomainStmt CreateGroupStmt CreateOpClassStmt
! 		CreateOpFamilyStmt AlterOpFamilyStmt CreatePLangStmt
  		CreateSchemaStmt CreateSeqStmt CreateStmt CreateTableSpaceStmt
  		CreateAssertStmt CreateTrigStmt CreateUserStmt CreateRoleStmt
! 		CreatedbStmt DeclareCursorStmt DefineStmt DeleteStmt DiscardStmt
! 		DropGroupStmt DropOpClassStmt DropOpFamilyStmt DropPLangStmt DropStmt
! 		DropAssertStmt DropTrigStmt DropRuleStmt DropCastStmt DropRoleStmt
! 		DropUserStmt DropdbStmt DropTableSpaceStmt ExplainStmt FetchStmt
! 		GrantStmt GrantRoleStmt IndexStmt InsertStmt ListenStmt LoadStmt
  		LockStmt NotifyStmt ExplainableStmt PreparableStmt
  		CreateFunctionStmt AlterFunctionStmt ReindexStmt RemoveAggrStmt
  		RemoveFuncStmt RemoveOperStmt RenameStmt RevokeStmt RevokeRoleStmt
--- 149,167 ----
  }
  
  %type <node>	stmt schema_stmt
! 		AlterDatabaseStmt AlterDatabaseSetStmt AlterDomainStmt AlterGroupStmt 
! 		AlterObjectSchemaStmt AlterOwnerStmt AlterSeqStmt AlterTableStmt 
! 		AlterUserStmt AlterUserSetStmt AlterRoleStmt AlterRoleSetStmt AnalyzeStmt 
! 		ClosePortalStmt ClusterStmt CommentStmt	ConstraintsSetStmt CopyStmt 
! 		CreateAsStmt CreateCastStmt	CreateCollationStmt CreateDomainStmt 
! 		CreateGroupStmt CreateOpClassStmt CreateOpFamilyStmt AlterOpFamilyStmt CreatePLangStmt
  		CreateSchemaStmt CreateSeqStmt CreateStmt CreateTableSpaceStmt
  		CreateAssertStmt CreateTrigStmt CreateUserStmt CreateRoleStmt
! 		CreatedbStmt DeclareCursorStmt DefineStmt DeleteStmt DiscardStmt 
! 		DropCollationStmt DropGroupStmt DropOpClassStmt DropOpFamilyStmt 
! 		DropPLangStmt DropStmt DropAssertStmt DropTrigStmt DropRuleStmt DropCastStmt 
! 		DropRoleStmt DropUserStmt DropdbStmt DropTableSpaceStmt ExplainStmt 
! 		FetchStmt GrantStmt GrantRoleStmt IndexStmt InsertStmt ListenStmt LoadStmt
  		LockStmt NotifyStmt ExplainableStmt PreparableStmt
  		CreateFunctionStmt AlterFunctionStmt ReindexStmt RemoveAggrStmt
  		RemoveFuncStmt RemoveOperStmt RenameStmt RevokeStmt RevokeRoleStmt
***************
*** 290,295 ****
--- 289,297 ----
  %type <list>	OptSeqList
  %type <defelt>	OptSeqElem
  
+ %type <list>	OptCollationList
+ %type <defelt>	OptCollationElem
+ 
  %type <istmt>	insert_rest
  
  %type <vsetstmt> set_rest SetResetClause
***************
*** 366,372 ****
   */
  
  /* ordinary key words in alphabetical order */
! %token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER
  	AGGREGATE ALL ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC
  	ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION
  
--- 368,374 ----
   */
  
  /* ordinary key words in alphabetical order */
! %token <keyword> ABORT_P ABSOLUTE_P ACCENT ACCESS ACTION ADD_P ADMIN AFTER
  	AGGREGATE ALL ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC
  	ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION
  
***************
*** 375,381 ****
  
  	CACHE CALLED CASCADE CASCADED CASE CAST CHAIN CHAR_P
  	CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
! 	CLUSTER COALESCE COLLATE COLUMN COMMENT COMMIT
  	COMMITTED CONCURRENTLY CONFIGURATION CONNECTION CONSTRAINT CONSTRAINTS
  	CONTENT_P CONVERSION_P COPY COST CREATE CREATEDB
  	CREATEROLE CREATEUSER CROSS CSV CURRENT_P CURRENT_DATE CURRENT_ROLE
--- 377,383 ----
  
  	CACHE CALLED CASCADE CASCADED CASE CAST CHAIN CHAR_P
  	CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
! 	CLUSTER COALESCE COLLATE COLLATION COLUMN COMMENT COMMIT
  	COMMITTED CONCURRENTLY CONFIGURATION CONNECTION CONSTRAINT CONSTRAINTS
  	CONTENT_P CONVERSION_P COPY COST CREATE CREATEDB
  	CREATEROLE CREATEUSER CROSS CSV CURRENT_P CURRENT_DATE CURRENT_ROLE
***************
*** 404,410 ****
  
  	KEY
  
! 	LANCOMPILER LANGUAGE LARGE_P LAST_P LEADING LEAST LEFT LEVEL
  	LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION
  	LOCK_P LOGIN_P
  
--- 406,412 ----
  
  	KEY
  
! 	LANCOMPILER LANGUAGE LARGE_P LAST_P LCCOLLATE LCCTYPE LEADING LEAST LEFT LEVEL
  	LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION
  	LOCK_P LOGIN_P
  
***************
*** 417,423 ****
  	OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR
  	ORDER OUT_P OUTER_P OVERLAPS OVERLAY OWNED OWNER
  
! 	PARSER PARTIAL PASSWORD PLACING PLANS POSITION
  	PRECISION PRESERVE PREPARE PREPARED PRIMARY
  	PRIOR PRIVILEGES PROCEDURAL PROCEDURE
  
--- 419,425 ----
  	OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR
  	ORDER OUT_P OUTER_P OVERLAPS OVERLAY OWNED OWNER
  
! 	PAD PARSER PARTIAL PASSWORD PLACING PLANS POSITION
  	PRECISION PRESERVE PREPARE PREPARED PRIMARY
  	PRIOR PRIVILEGES PROCEDURAL PROCEDURE
  
***************
*** 427,437 ****
  	REPEATABLE REPLACE REPLICA RESET RESTART RESTRICT RETURNING RETURNS REVOKE
  	RIGHT ROLE ROLLBACK ROW ROWS RULE
  
! 	SAVEPOINT SCHEMA SCROLL SEARCH SECOND_P SECURITY SELECT SEQUENCE
! 	SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE
! 	SHOW SIMILAR SIMPLE SMALLINT SOME STABLE STANDALONE_P START STATEMENT
! 	STATISTICS STDIN STDOUT STORAGE STRICT_P STRIP_P SUBSTRING SUPERUSER_P
! 	SYMMETRIC SYSID SYSTEM_P
  
  	TABLE TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN TIME TIMESTAMP
  	TO TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P
--- 429,439 ----
  	REPEATABLE REPLACE REPLICA RESET RESTART RESTRICT RETURNING RETURNS REVOKE
  	RIGHT ROLE ROLLBACK ROW ROWS RULE
  
! 	SAVEPOINT SCHEMA SCROLL SEARCH SECOND_P SECURITY SELECT SENSITIVE
! 	SEQUENCE SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE
! 	SHOW SIMILAR SIMPLE SMALLINT SOME SPACE STABLE STANDALONE_P START STATEMENT
! 	STATISTICS STDIN STDOUT STORAGE STRCOLFN STRICT_P STRIP_P SUBSTRING 
! 	SUPERUSER_P	SYMMETRIC SYSID SYSTEM_P
  
  	TABLE TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN TIME TIMESTAMP
  	TO TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P
***************
*** 552,557 ****
--- 554,560 ----
  			| CreateAsStmt
  			| CreateAssertStmt
  			| CreateCastStmt
+ 			| CreateCollationStmt
  			| CreateConversionStmt
  			| CreateDomainStmt
  			| CreateFunctionStmt
***************
*** 575,580 ****
--- 578,584 ----
  			| DiscardStmt
  			| DropAssertStmt
  			| DropCastStmt
+ 			| DropCollationStmt
  			| DropGroupStmt
  			| DropOpClassStmt
  			| DropOpFamilyStmt
***************
*** 2410,2415 ****
--- 2414,2497 ----
  				}
  		;
  
+ /*****************************************************************************
+  *
+  *		QUERY :
+  *
+  * CREATE COLLATION <collation name> FOR <character set specification> 
+  * 		FROM <existing collation name> [STRCOLFN <fn name>] 
+  *		[ <pad characteristic> ] [ <case sensitive> ] [ <accent sensitive> ] 
+  *		[ LCCOLLATE <lc_collate> ] [ LCCTYPE <lc_ctype> ]
+  *
+  * DROP COLLATION <collation name>
+  *
+  *****************************************************************************/
+ 
+ CreateCollationStmt:
+ 			CREATE COLLATION qualified_name FOR qualified_name FROM qualified_name OptCollationList
+ 				{
+ 					CreateCollationStmt *n = makeNode(CreateCollationStmt);
+ 					n->name = $3;
+ 					n->for_charset = $5;
+ 					n->from_collation = $7;
+ 					n->options = $8;
+ 					$$ = (Node *)n;
+ 				}
+ 		;
+ 
+ OptCollationList: 
+ 			OptCollationList OptCollationElem		{ $$ = lappend($1, $2); }
+ 			| /*EMPTY*/								{ $$ = NIL; }
+ 		;
+ 
+ OptCollationElem:
+ 			NO PAD
+ 				{
+ 					$$ = makeDefElem("pad_characteristic", (Node *)makeInteger(FALSE));				
+ 				}
+ 			| PAD SPACE
+ 				{
+ 					$$ = makeDefElem("pad_characteristic", (Node *)makeInteger(TRUE));				
+ 				}
+ 			| CASE SENSITIVE
+ 				{
+ 					$$ = makeDefElem("case_sensitive", (Node *)makeInteger(TRUE));				
+ 				}
+ 			| CASE INSENSITIVE
+ 				{
+ 					$$ = makeDefElem("case_sensitive", (Node *)makeInteger(FALSE));								
+ 				}
+ 			| ACCENT SENSITIVE
+ 				{
+ 					$$ = makeDefElem("accent_sensitive", (Node *)makeInteger(TRUE));								
+ 				}
+ 			| ACCENT INSENSITIVE
+ 				{
+ 					$$ = makeDefElem("accent_sensitive", (Node *)makeInteger(FALSE));								
+ 				}
+ 			| LCCOLLATE qualified_name
+ 				{
+ 					$$ = makeDefElem("lc_collate_name", (Node *)makeString($2));				
+ 				}
+ 			| LCCTYPE qualified_name
+ 				{
+ 					$$ = makeDefElem("lc_ctype_name", (Node *)makeString($2));				
+ 				}
+ 			| STRCOLFN qualified_name
+ 				{
+ 					$$ = makeDefElem("str_col_function", (Node *)makeString($2));				
+ 				}
+ 		;
+ 
+ DropCollationStmt:
+ 			DROP COLLATION name
+ 				{
+ 					DropCollationStmt *n = makeNode(DropCollationStmt);
+ 					n->name = $3;
+ 					$$ = (Node *)n;
+ 				}
+ 		;
+ 
  
  /*****************************************************************************
   *
***************
*** 5349,5354 ****
--- 5431,5444 ----
  				{
  					$$ = makeDefElem("encoding", NULL);
  				}
+ 			| COLLATE opt_equal qualified_name
+ 				{
+ 					$$ = makeDefElem("collate", (Node *)makeString($3));
+ 				}
+ 			| COLLATE opt_equal DEFAULT
+ 				{
+ 					$$ = makeDefElem("collate", NULL);
+ 				}
  			| CONNECTION LIMIT opt_equal SignedIconst
  				{
  					$$ = makeDefElem("connectionlimit", (Node *)makeInteger($4));
***************
*** 9001,9006 ****
--- 9091,9097 ----
  unreserved_keyword:
  			  ABORT_P
  			| ABSOLUTE_P
+ 			| ACCENT
  			| ACCESS
  			| ACTION
  			| ADD_P
***************
*** 9027,9032 ****
--- 9118,9125 ----
  			| CLASS
  			| CLOSE
  			| CLUSTER
+ 			| COLLATE
+ 			| COLLATION
  			| COMMENT
  			| COMMIT
  			| COMMITTED
***************
*** 9106,9111 ****
--- 9199,9206 ----
  			| LANGUAGE
  			| LARGE_P
  			| LAST_P
+ 			| LCCOLLATE
+ 			| LCCTYPE
  			| LEVEL
  			| LISTEN
  			| LOAD
***************
*** 9142,9147 ****
--- 9237,9243 ----
  			| OPTION
  			| OWNED
  			| OWNER
+ 			| PAD
  			| PARSER
  			| PARTIAL
  			| PASSWORD
***************
*** 9179,9184 ****
--- 9275,9281 ----
  			| SEARCH
  			| SECOND_P
  			| SECURITY
+ 			| SENSITIVE
  			| SEQUENCE
  			| SERIALIZABLE
  			| SESSION
***************
*** 9186,9191 ****
--- 9283,9289 ----
  			| SHARE
  			| SHOW
  			| SIMPLE
+ 			| SPACE
  			| STABLE
  			| STANDALONE_P
  			| START
***************
*** 9194,9199 ****
--- 9292,9298 ----
  			| STDIN
  			| STDOUT
  			| STORAGE
+ 			| STRCOLFN
  			| STRICT_P
  			| STRIP_P
  			| SUPERUSER_P
***************
*** 9345,9351 ****
  			| CASE
  			| CAST
  			| CHECK
- 			| COLLATE
  			| COLUMN
  			| CONSTRAINT
  			| CREATE
--- 9444,9449 ----
Index: include/nodes/nodes.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/nodes/nodes.h,v
retrieving revision 1.205
diff -c -r1.205 nodes.h
*** include/nodes/nodes.h	1 Jan 2008 19:45:58 -0000	1.205
--- include/nodes/nodes.h	1 Jul 2008 14:29:26 -0000
***************
*** 313,318 ****
--- 313,320 ----
  	T_CreateEnumStmt,
  	T_AlterTSDictionaryStmt,
  	T_AlterTSConfigurationStmt,
+ 	T_CreateCollationStmt,
+ 	T_DropCollationStmt,
  
  	/*
  	 * TAGS FOR PARSE TREE NODES (parsenodes.h)
Index: include/nodes/parsenodes.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/nodes/parsenodes.h,v
retrieving revision 1.358
diff -c -r1.358 parsenodes.h
*** include/nodes/parsenodes.h	1 Jan 2008 19:45:58 -0000	1.358
--- include/nodes/parsenodes.h	1 Jul 2008 14:29:31 -0000
***************
*** 1198,1203 ****
--- 1198,1227 ----
  	bool		skip_validation;	/* skip validation of existing rows? */
  } FkConstraint;
  
+ /* ----------------------
+  *		Create/Drop Collation Statements
+  * ----------------------
+  */
+  
+  typedef struct CreateCollationStmt
+  {
+  	NodeTag		type;	
+  	char	   *name;
+  	char	   *for_charset;
+  	char	   *from_collation;
+  	List	   *options;
+  	
+  } CreateCollationStmt;
+  
+  typedef struct DropCollationStmt
+  {
+  	NodeTag		type;	
+  	char	   *name;
+  	
+  } DropCollationStmt;
+  
+ 
+ 
  
  /* ----------------------
   *		Create/Drop Table Space Statements
Index: src/include/catalog/pg_collation.h
===================================================================
RCS file: src/include/catalog/pg_collation.h
diff -N src/include/catalog/pg_collation.h
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- src/include/catalog/pg_collation.h	1 Jan 1970 00:00:00 -0000
***************
*** 0 ****
--- 1,101 ----
+ /*-------------------------------------------------------------------------
+  *
+  * pg_collation.h
+  *	  definition of the system "collation" relation (pg_collation)
+  *	  along with the relation's initial contents.
+  *
+  *
+  * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
+  * Portions Copyright (c) 1994, Regents of the University of California
+  *
+  * $PostgreSQL: pgsql/src/include/catalog/pg_depend.h,v 1.1 2008/04/10 19:45:56 momjian Exp $
+  *
+  * NOTES
+  *	  the genbki.sh script reads this file and generates .bki
+  *	  information from the DATA() statements.
+  *
+  *-------------------------------------------------------------------------
+  */
+ 
+ #ifndef PG_COLLATION_H
+ #define PG_COLLATION_H
+ 
+ /* ----------------
+  *		postgres.h contains the system type definitions and the
+  *		CATALOG(), BKI_BOOTSTRAP and DATA() sugar words so this file
+  *		can be read by both genbki.sh and the C compiler.
+  * ----------------
+  */
+ 
+ /* ----------------
+  *		pg_collation definition.  cpp turns this into
+  *		typedef struct FormData_pg_depend
+  * ----------------
+  */
+  
+ #define CollationRelationId  2978
+ 
+ enum {
+ 	PAD_CHARACTERISTIC_NO_PAD = 0;
+ 	PAD_CHARACTERISTIC_PAD_SPACE = 1;
+ 	
+ }	CollationPadCharacteristic;
+ 
+ enum {
+ 	CASE_INSENSITIVE = 0;
+ 	CASE_SENSITIVE = 1;
+ 		
+ }	CollationCaseSensitive;
+ 
+ enum {
+ 	ACCENT_INSENSITIVE = 0;
+ 	ACCENT_SENSITIVE = 1;
+ 	
+ }	CollationAccentSensitive;
+ 
+ 
+ CATALOG (pg_collation, 2978)
+ {
+   NameData    	colname;        		/* collation name */
+   Oid        	colschema;        		/* collation schema */
+   NameData   	colcharset;    			/*  character set specification */
+   Oid         	colexistingcollation; 	/* existing collation */
+   bool        	colpadattribute;    	/* pad attribute */
+   bool        	colcasesensitive;    	/* case sensitive */
+   bool        	colaccentsensitive;		/* accent sensitive */
+   NameData    	colcollate;    			/* lc_collate */
+   NameData    	colctype; 				/* lc_ctype */
+   regproc       colfunc;        		/* used collation function */	
+ 	
+ } FormData_pg_collation;
+ 
+ /* ----------------
+  *		Form_pg_collation corresponds to a pointer to a tuple with
+  *		the format of pg_collation relation.
+  * ----------------
+  */
+ typedef FormData_pg_collation *Form_pg_collation;
+ 
+ /* ----------------
+  *		compiler constants for pg_collation
+  * ----------------
+  */
+ #define Natts_pg_collation						10
+ #define Anum_pg_collation_colname				1
+ #define Anum_pg_collation_colschema				2
+ #define	Anum_pg_collation_colcharset			3
+ #define	Anum_pg_collation_colexistingcollation	4
+ #define	Anum_pg_collation_colpadattribute		5
+ #define	Anum_pg_collation_colcasesensitive		6
+ #define	Anum_pg_collation_colaccentsensitive	7
+ #define	Anum_pg_collation_colcollate			8
+ #define	Anum_pg_collation_colctype				9
+ #define	Anum_pg_collation_colfunc				10
+ 
+ /* ----------------
+  *		initial contents of pg_collation
+  * ----------------
+  */
+  
+  
+ #endif   /* PG_COLLATION_H */
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to