From ea4223c45f774b5d092939c666ba7bbc7b4b39cb Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 14 Nov 1997 05:57:46 +0000 Subject: [PATCH] FIx for indexing regex stuff. Change rowoid to objoid. --- src/backend/parser/gram.y | 73 +++--------------------------------- src/bin/psql/psql.c | 16 ++++---- src/include/catalog/indexing.h | 8 ++-- src/include/catalog/pg_description.h | 6 +-- 4 files changed, 20 insertions(+), 83 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index d80d5b48f4..d29d088659 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.64 1997/11/10 15:22:36 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.65 1997/11/14 05:57:23 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -3552,7 +3552,8 @@ static Node *makeIndexable(char *opname, Node *lexpr, Node *rexpr) Node *result = NULL; /* we do this so indexes can be used */ - if (strcmp(opname,"~") == 0) + if (strcmp(opname,"~") == 0 || + strcmp(opname,"~*") == 0) { if (nodeTag(rexpr) == T_A_Const && ((A_Const *)rexpr)->val.type == T_String && @@ -3570,7 +3571,8 @@ static Node *makeIndexable(char *opname, Node *lexpr, Node *rexpr) n->val.val.str[pos] == '?' || n->val.val.str[pos] == '*' || n->val.val.str[pos] == '[' || - n->val.val.str[pos] == '$') + n->val.val.str[pos] == '$' || + (strcmp(opname,"~*") == 0 && isalpha(n->val.val.str[pos])) break; if (n->val.val.str[pos] == '\\') pos++; @@ -3599,71 +3601,6 @@ static Node *makeIndexable(char *opname, Node *lexpr, Node *rexpr) } } } - else if (strcmp(opname,"~*") == 0) - { - if (nodeTag(rexpr) == T_A_Const && - ((A_Const *)rexpr)->val.type == T_String && - ((A_Const *)rexpr)->val.val.str[0] == '^') - { - A_Const *n = (A_Const *)rexpr; - char *match_lower_least = palloc(strlen(n->val.val.str)+2); - char *match_lower_most = palloc(strlen(n->val.val.str)+2); - char *match_upper_least = palloc(strlen(n->val.val.str)+2); - char *match_upper_most = palloc(strlen(n->val.val.str)+2); - int pos, match_pos=0; - - /* skip leading ^ */ - for (pos = 1; n->val.val.str[pos]; pos++) - { - if (n->val.val.str[pos] == '.' || - n->val.val.str[pos] == '?' || - n->val.val.str[pos] == '*' || - n->val.val.str[pos] == '[' || - n->val.val.str[pos] == '$') - break; - if (n->val.val.str[pos] == '\\') - pos++; - /* If we have punctuation, this works well */ - match_lower_least[match_pos] = tolower(n->val.val.str[pos]); - match_lower_most[match_pos] = tolower(n->val.val.str[pos]); - match_upper_least[match_pos] = toupper(n->val.val.str[pos]); - match_upper_most[match_pos++] = toupper(n->val.val.str[pos]); - } - - if (match_pos != 0) - { - A_Const *lower_least = makeNode(A_Const); - A_Const *lower_most = makeNode(A_Const); - A_Const *upper_least = makeNode(A_Const); - A_Const *upper_most = makeNode(A_Const); - - /* make strings to be used in index use */ - match_lower_least[match_pos] = '\0'; - match_lower_most[match_pos] = '\377'; - match_lower_most[match_pos+1] = '\0'; - match_upper_least[match_pos] = '\0'; - match_upper_most[match_pos] = '\377'; - match_upper_most[match_pos+1] = '\0'; - lower_least->val.type = T_String; - lower_least->val.val.str = match_lower_least; - lower_most->val.type = T_String; - lower_most->val.val.str = match_lower_most; - upper_least->val.type = T_String; - upper_least->val.val.str = match_upper_least; - upper_most->val.type = T_String; - upper_most->val.val.str = match_upper_most; - result = makeA_Expr(AND, NULL, - makeA_Expr(OP, "~*", lexpr, rexpr), - makeA_Expr(OR, NULL, - makeA_Expr(AND, NULL, - makeA_Expr(OP, ">=", lexpr, (Node *)lower_least), - makeA_Expr(OP, "<=", lexpr, (Node *)lower_most)), - makeA_Expr(AND, NULL, - makeA_Expr(OP, ">=", lexpr, (Node *)upper_least), - makeA_Expr(OP, "<=", lexpr, (Node *)upper_most)))); - } - } - } else if (strcmp(opname,"~~") == 0) { if (nodeTag(rexpr) == T_A_Const && diff --git a/src/bin/psql/psql.c b/src/bin/psql/psql.c index 2928a414f1..4c54483763 100644 --- a/src/bin/psql/psql.c +++ b/src/bin/psql/psql.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.103 1997/11/13 03:36:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.104 1997/11/14 05:57:35 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -729,7 +729,7 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) strcat(descbuf, "pg_attribute.attname = '"); strcat(descbuf, column); strcat(descbuf, "' and "); - strcat(descbuf, " pg_attribute.oid = pg_description.rowoid " ); + strcat(descbuf, " pg_attribute.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; } @@ -740,7 +740,7 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) strcat(descbuf, "WHERE pg_class.relname = '"); strcat(descbuf, object); strcat(descbuf, "'" ); - strcat(descbuf, " and pg_class.oid = pg_description.rowoid " ); + strcat(descbuf, " and pg_class.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; else if (PQntuples(res) <= 0) @@ -752,7 +752,7 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) strcat(descbuf, "WHERE pg_type.typname = '"); strcat(descbuf, object); strcat(descbuf, "'" ); - strcat(descbuf, " and pg_type.oid = pg_description.rowoid " ); + strcat(descbuf, " and pg_type.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; else if (PQntuples(res) <= 0) @@ -764,7 +764,7 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) strcat(descbuf, "WHERE pg_type.typname = '"); strcat(descbuf, object); strcat(descbuf, "'" ); - strcat(descbuf, " and pg_type.oid = pg_description.rowoid " ); + strcat(descbuf, " and pg_type.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; else if (PQntuples(res) <= 0) @@ -776,7 +776,7 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) strcat(descbuf, "WHERE pg_proc.proname = '"); strcat(descbuf, object); strcat(descbuf, "'" ); - strcat(descbuf, " and pg_proc.oid = pg_description.rowoid " ); + strcat(descbuf, " and pg_proc.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; else if (PQntuples(res) <= 0) @@ -788,7 +788,7 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) strcat(descbuf, "WHERE pg_operator.oprname = '"); strcat(descbuf, object); strcat(descbuf, "'" ); - strcat(descbuf, " and pg_operator.oid = pg_description.rowoid " ); + strcat(descbuf, " and pg_operator.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; else if (PQntuples(res) <= 0) @@ -800,7 +800,7 @@ objectDescription(PsqlSettings *pset, char *object, FILE *fout) strcat(descbuf, "WHERE pg_aggregate.aggname = '"); strcat(descbuf, object); strcat(descbuf, "'" ); - strcat(descbuf, " and pg_aggregate.oid = pg_description.rowoid " ); + strcat(descbuf, " and pg_aggregate.oid = pg_description.objoid " ); if (!(res = PSQLexec(pset, descbuf))) return -1; } diff --git a/src/include/catalog/indexing.h b/src/include/catalog/indexing.h index e07ab73871..fafe274a5b 100644 --- a/src/include/catalog/indexing.h +++ b/src/include/catalog/indexing.h @@ -7,7 +7,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: indexing.h,v 1.8 1997/11/13 03:22:54 momjian Exp $ + * $Id: indexing.h,v 1.9 1997/11/14 05:57:42 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -46,7 +46,7 @@ #define AttrDefaultIndex "pg_attrdefind" #define RelCheckIndex "pg_relcheckind" #define TriggerRelidIndex "pg_trigrelidind" -#define DescriptionRowOidIndex "pg_descrrowoidind" +#define DescriptionObjOidIndex "pg_descrobjoidind" extern char *Name_pg_attr_indices[]; extern char *Name_pg_proc_indices[]; @@ -55,7 +55,7 @@ extern char *Name_pg_class_indices[]; extern char *Name_pg_attrdef_indices[]; extern char *Name_pg_relcheck_indices[]; extern char *Name_pg_trigger_indices[]; -extern char *Name_pg_rowoid_indices[]; +extern char *Name_pg_objoid_indices[]; extern char *IndexedCatalogNames[]; @@ -119,7 +119,7 @@ DECLARE_INDEX(pg_relcheckind on pg_relcheck using btree(rcrelid oid_ops)); DECLARE_INDEX(pg_trigrelidind on pg_trigger using btree(tgrelid oid_ops)); -DECLARE_INDEX(pg_descrrowoidind on pg_description using btree(rowoid oid_ops)); +DECLARE_INDEX(pg_descrobjoidind on pg_description using btree(objoid oid_ops)); /* now build indices in the initialization scripts */ BUILD_INDICES diff --git a/src/include/catalog/pg_description.h b/src/include/catalog/pg_description.h index afdcf9dabb..cbe50a1abb 100644 --- a/src/include/catalog/pg_description.h +++ b/src/include/catalog/pg_description.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_description.h,v 1.1 1997/11/13 03:22:59 momjian Exp $ + * $Id: pg_description.h,v 1.2 1997/11/14 05:57:46 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -34,7 +34,7 @@ */ CATALOG(pg_description) { - Oid rowoid; + Oid objoid; text description; } FormData_pg_description; @@ -50,7 +50,7 @@ typedef FormData_pg_description *Form_pg_description; * ---------------- */ #define Natts_pg_description 2 -#define Anum_pg_description_rowoid 1 +#define Anum_pg_description_objoid 1 #define Anum_pg_description_description 2 /* ---------------- -- 2.11.0