OSDN Git Service

FIx for indexing regex stuff. Change rowoid to objoid.
authorBruce Momjian <bruce@momjian.us>
Fri, 14 Nov 1997 05:57:46 +0000 (05:57 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 14 Nov 1997 05:57:46 +0000 (05:57 +0000)
src/backend/parser/gram.y
src/bin/psql/psql.c
src/include/catalog/indexing.h
src/include/catalog/pg_description.h

index d80d5b4..d29d088 100644 (file)
@@ -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 &&
index 2928a41..4c54483 100644 (file)
@@ -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;
                                                }
index e07ab73..fafe274 100644 (file)
@@ -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
index afdcf9d..cbe50a1 100644 (file)
@@ -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
 
 /* ----------------