aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2002-05-14 13:05:43 +0000
committerPeter Eisentraut <peter_e@gmx.net>2002-05-14 13:05:43 +0000
commit5c4e5aa3ff138408142a5d412b0809fae2e0a4f8 (patch)
tree89f9bf4ff429ac09070b600e9ba3e6bbf9dca9ee
parentcd61650f89a4de6728f4fd61b5f349a33be62497 (diff)
downloadpostgresql-5c4e5aa3ff138408142a5d412b0809fae2e0a4f8.tar.gz
postgresql-5c4e5aa3ff138408142a5d412b0809fae2e0a4f8.zip
Make regression tests locale-proof by setting some locale categories
to C at run-time, and providing alternative output files for different sort orders.
-rw-r--r--doc/src/sgml/regress.sgml38
-rw-r--r--src/backend/utils/misc/guc.c10
-rw-r--r--src/test/regress/expected/char_1.out122
-rw-r--r--src/test/regress/expected/select_having_1.out41
-rw-r--r--src/test/regress/expected/select_implicit_1.out320
-rw-r--r--src/test/regress/expected/select_views_1.out1249
-rw-r--r--src/test/regress/expected/varchar_1.out111
-rw-r--r--src/test/regress/pg_regress.sh44
8 files changed, 1910 insertions, 25 deletions
diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml
index 9f6ff60541b..64c5abdf8ce 100644
--- a/doc/src/sgml/regress.sgml
+++ b/doc/src/sgml/regress.sgml
@@ -1,4 +1,4 @@
-<!-- $Header: /cvsroot/pgsql/doc/src/sgml/regress.sgml,v 1.26 2002/04/08 04:37:36 tgl Exp $ -->
+<!-- $Header: /cvsroot/pgsql/doc/src/sgml/regress.sgml,v 1.27 2002/05/14 13:05:42 petere Exp $ -->
<chapter id="regress">
<title id="regress-title">Regression Tests</title>
@@ -177,22 +177,32 @@
<title>Locale differences</title>
<para>
- The tests expect to run in plain <quote>C</quote> locale. This
- should not cause any problems when you run the tests against a
- temporary installation, since the regression test driver takes care
- to start the server in C locale. However, if you run the tests
- against an already-installed server that is using non-C locale settings,
- you may see differences caused by varying rules for string sort order,
- formatting of numeric and monetary values, and so forth.
+ If you run the tests against an already-installed server that was
+ initialized with a collation order locale different than C then
+ there may be differences due to sort order and follow-up
+ failures. The regression test suite is set up to handle this
+ problem by providing alternative result files that together are
+ known to handle a large number of locales. For example, for the
+ <quote>char</quote> test, the expected file
+ <filename>char.out</filename> handles the C and POSIX locales,
+ and the file <filename>char_1.out</filename> handles many other
+ locales. The regression test driver will automatically pick the
+ best file to match against when checking for success and for
+ computing failure differences. (This means that the regression
+ tests cannot detect whether the results are appropriate for the
+ configured locale. The tests will simply pick the one result
+ file that works best.)
</para>
<para>
- In some locales the resulting differences are small and easily checked by
- inspection. However, in a locale that changes the rules for formatting
- of numeric values (typically by swapping the usage of commas and
- decimal points), entry of some data values will fail, resulting in
- extensive differences later in the tests where the missing data values
- are supposed to be used.
+ If for some reason the existing expected files do not cover some
+ locale, you can add a new file. The naming scheme is
+ <literal><replaceable>testname</>_<replaceable>digit</>.out</>.
+ The actual digit is not significant. Remember that the
+ regression test driver will consider all such files to be equally
+ valid test results. If the test results are platform-dependent,
+ the technique described in <xref linkend="regress-platform">
+ should be used instead.
</para>
</sect2>
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 4d4e9f274da..f917af9a422 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -4,7 +4,7 @@
* Support for grand unified configuration scheme, including SET
* command, configuration file, and command line options.
*
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.66 2002/04/21 00:22:52 ishii Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.67 2002/05/14 13:05:43 petere Exp $
*
* Copyright 2000 by PostgreSQL Global Development Group
* Written by Peter Eisentraut <peter_e@gmx.net>.
@@ -587,22 +587,22 @@ static struct config_string
},
{
- "lc_messages", PGC_POSTMASTER, PGC_S_DEFAULT, &locale_messages,
+ "lc_messages", PGC_SUSET, PGC_S_DEFAULT, &locale_messages,
"", locale_messages_check, locale_messages_assign
},
{
- "lc_monetary", PGC_POSTMASTER, PGC_S_DEFAULT, &locale_monetary,
+ "lc_monetary", PGC_USERSET, PGC_S_DEFAULT, &locale_monetary,
"", locale_monetary_check, locale_monetary_assign
},
{
- "lc_numeric", PGC_POSTMASTER, PGC_S_DEFAULT, &locale_numeric,
+ "lc_numeric", PGC_USERSET, PGC_S_DEFAULT, &locale_numeric,
"", locale_numeric_check, locale_numeric_assign
},
{
- "lc_time", PGC_POSTMASTER, PGC_S_DEFAULT, &locale_time,
+ "lc_time", PGC_USERSET, PGC_S_DEFAULT, &locale_time,
"", locale_time_check, locale_time_assign
},
diff --git a/src/test/regress/expected/char_1.out b/src/test/regress/expected/char_1.out
new file mode 100644
index 00000000000..0d5be3097d0
--- /dev/null
+++ b/src/test/regress/expected/char_1.out
@@ -0,0 +1,122 @@
+--
+-- CHAR
+--
+-- fixed-length by value
+-- internally passed by value if <= 4 bytes in storage
+SELECT char 'c' = char 'c' AS true;
+ true
+------
+ t
+(1 row)
+
+--
+-- Build a table for testing
+--
+CREATE TABLE CHAR_TBL(f1 char);
+INSERT INTO CHAR_TBL (f1) VALUES ('a');
+INSERT INTO CHAR_TBL (f1) VALUES ('A');
+-- any of the following three input formats are acceptable
+INSERT INTO CHAR_TBL (f1) VALUES ('1');
+INSERT INTO CHAR_TBL (f1) VALUES (2);
+INSERT INTO CHAR_TBL (f1) VALUES ('3');
+-- zero-length char
+INSERT INTO CHAR_TBL (f1) VALUES ('');
+-- try char's of greater than 1 length
+INSERT INTO CHAR_TBL (f1) VALUES ('cd');
+ERROR: value too long for type character(1)
+INSERT INTO CHAR_TBL (f1) VALUES ('c ');
+SELECT '' AS seven, CHAR_TBL.*;
+ seven | f1
+-------+----
+ | a
+ | A
+ | 1
+ | 2
+ | 3
+ |
+ | c
+(7 rows)
+
+SELECT '' AS six, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 <> 'a';
+ six | f1
+-----+----
+ | A
+ | 1
+ | 2
+ | 3
+ |
+ | c
+(6 rows)
+
+SELECT '' AS one, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 = 'a';
+ one | f1
+-----+----
+ | a
+(1 row)
+
+SELECT '' AS five, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 < 'a';
+ five | f1
+------+----
+ | 1
+ | 2
+ | 3
+ |
+(4 rows)
+
+SELECT '' AS six, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 <= 'a';
+ six | f1
+-----+----
+ | a
+ | 1
+ | 2
+ | 3
+ |
+(5 rows)
+
+SELECT '' AS one, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 > 'a';
+ one | f1
+-----+----
+ | A
+ | c
+(2 rows)
+
+SELECT '' AS two, c.*
+ FROM CHAR_TBL c
+ WHERE c.f1 >= 'a';
+ two | f1
+-----+----
+ | a
+ | A
+ | c
+(3 rows)
+
+DROP TABLE CHAR_TBL;
+--
+-- Now test longer arrays of char
+--
+CREATE TABLE CHAR_TBL(f1 char(4));
+INSERT INTO CHAR_TBL (f1) VALUES ('a');
+INSERT INTO CHAR_TBL (f1) VALUES ('ab');
+INSERT INTO CHAR_TBL (f1) VALUES ('abcd');
+INSERT INTO CHAR_TBL (f1) VALUES ('abcde');
+ERROR: value too long for type character(4)
+INSERT INTO CHAR_TBL (f1) VALUES ('abcd ');
+SELECT '' AS four, CHAR_TBL.*;
+ four | f1
+------+------
+ | a
+ | ab
+ | abcd
+ | abcd
+(4 rows)
+
diff --git a/src/test/regress/expected/select_having_1.out b/src/test/regress/expected/select_having_1.out
new file mode 100644
index 00000000000..b53f4a7f11a
--- /dev/null
+++ b/src/test/regress/expected/select_having_1.out
@@ -0,0 +1,41 @@
+--
+-- SELECT_HAVING
+--
+-- load test data
+CREATE TABLE test_having (a int, b int, c char(8), d char);
+INSERT INTO test_having VALUES (0, 1, 'XXXX', 'A');
+INSERT INTO test_having VALUES (1, 2, 'AAAA', 'b');
+INSERT INTO test_having VALUES (2, 2, 'AAAA', 'c');
+INSERT INTO test_having VALUES (3, 3, 'BBBB', 'D');
+INSERT INTO test_having VALUES (4, 3, 'BBBB', 'e');
+INSERT INTO test_having VALUES (5, 3, 'bbbb', 'F');
+INSERT INTO test_having VALUES (6, 4, 'cccc', 'g');
+INSERT INTO test_having VALUES (7, 4, 'cccc', 'h');
+INSERT INTO test_having VALUES (8, 4, 'CCCC', 'I');
+INSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');
+SELECT b, c FROM test_having
+ GROUP BY b, c HAVING count(*) = 1;
+ b | c
+---+----------
+ 1 | XXXX
+ 3 | bbbb
+(2 rows)
+
+SELECT lower(c), count(c) FROM test_having
+ GROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a);
+ lower | count
+----------+-------
+ bbbb | 3
+ cccc | 4
+ xxxx | 1
+(3 rows)
+
+SELECT c, max(a) FROM test_having
+ GROUP BY c HAVING count(*) > 2 OR min(a) = max(a);
+ c | max
+----------+-----
+ bbbb | 5
+ XXXX | 0
+(2 rows)
+
+DROP TABLE test_having;
diff --git a/src/test/regress/expected/select_implicit_1.out b/src/test/regress/expected/select_implicit_1.out
new file mode 100644
index 00000000000..d63a5727368
--- /dev/null
+++ b/src/test/regress/expected/select_implicit_1.out
@@ -0,0 +1,320 @@
+--
+-- SELECT_IMPLICIT
+-- Test cases for queries with ordering terms missing from the target list.
+-- This used to be called "junkfilter.sql".
+-- The parser uses the term "resjunk" to handle these cases.
+-- - thomas 1998-07-09
+--
+-- load test data
+CREATE TABLE test_missing_target (a int, b int, c char(8), d char);
+INSERT INTO test_missing_target VALUES (0, 1, 'XXXX', 'A');
+INSERT INTO test_missing_target VALUES (1, 2, 'AAAA', 'b');
+INSERT INTO test_missing_target VALUES (2, 2, 'AAAA', 'c');
+INSERT INTO test_missing_target VALUES (3, 3, 'BBBB', 'D');
+INSERT INTO test_missing_target VALUES (4, 3, 'BBBB', 'e');
+INSERT INTO test_missing_target VALUES (5, 3, 'bbbb', 'F');
+INSERT INTO test_missing_target VALUES (6, 4, 'cccc', 'g');
+INSERT INTO test_missing_target VALUES (7, 4, 'cccc', 'h');
+INSERT INTO test_missing_target VALUES (8, 4, 'CCCC', 'I');
+INSERT INTO test_missing_target VALUES (9, 4, 'CCCC', 'j');
+-- w/ existing GROUP BY target
+SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c;
+ c | count
+----------+-------
+ AAAA | 2
+ bbbb | 1
+ BBBB | 2
+ cccc | 2
+ CCCC | 2
+ XXXX | 1
+(6 rows)
+
+-- w/o existing GROUP BY target using a relation name in GROUP BY clause
+SELECT count(*) FROM test_missing_target GROUP BY test_missing_target.c;
+ count
+-------
+ 2
+ 1
+ 2
+ 2
+ 2
+ 1
+(6 rows)
+
+-- w/o existing GROUP BY target and w/o existing a different ORDER BY target
+-- failure expected
+SELECT count(*) FROM test_missing_target GROUP BY a ORDER BY b;
+ERROR: Attribute test_missing_target.b must be GROUPed or used in an aggregate function
+-- w/o existing GROUP BY target and w/o existing same ORDER BY target
+SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b;
+ count
+-------
+ 1
+ 2
+ 3
+ 4
+(4 rows)
+
+-- w/ existing GROUP BY target using a relation name in target
+SELECT test_missing_target.b, count(*)
+ FROM test_missing_target GROUP BY b ORDER BY b;
+ b | count
+---+-------
+ 1 | 1
+ 2 | 2
+ 3 | 3
+ 4 | 4
+(4 rows)
+
+-- w/o existing GROUP BY target
+SELECT c FROM test_missing_target ORDER BY a;
+ c
+----------
+ XXXX
+ AAAA
+ AAAA
+ BBBB
+ BBBB
+ bbbb
+ cccc
+ cccc
+ CCCC
+ CCCC
+(10 rows)
+
+-- w/o existing ORDER BY target
+SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b desc;
+ count
+-------
+ 4
+ 3
+ 2
+ 1
+(4 rows)
+
+-- group using reference number
+SELECT count(*) FROM test_missing_target ORDER BY 1 desc;
+ count
+-------
+ 10
+(1 row)
+
+-- order using reference number
+SELECT c, count(*) FROM test_missing_target GROUP BY 1;
+ c | count
+----------+-------
+ AAAA | 2
+ bbbb | 1
+ BBBB | 2
+ cccc | 2
+ CCCC | 2
+ XXXX | 1
+(6 rows)
+
+-- group using reference number out of range
+-- failure expected
+SELECT c, count(*) FROM test_missing_target GROUP BY 3;
+ERROR: GROUP BY position 3 is not in target list
+-- group w/o existing GROUP BY and ORDER BY target under ambiguous condition
+-- failure expected
+SELECT count(*) FROM test_missing_target x, test_missing_target y
+ WHERE x.a = y.a
+ GROUP BY b ORDER BY b;
+ERROR: Column reference "b" is ambiguous
+-- order w/ target under ambiguous condition
+-- failure NOT expected
+SELECT a, a FROM test_missing_target
+ ORDER BY a;
+ a | a
+---+---
+ 0 | 0
+ 1 | 1
+ 2 | 2
+ 3 | 3
+ 4 | 4
+ 5 | 5
+ 6 | 6
+ 7 | 7
+ 8 | 8
+ 9 | 9
+(10 rows)
+
+-- order expression w/ target under ambiguous condition
+-- failure NOT expected
+SELECT a/2, a/2 FROM test_missing_target
+ ORDER BY a/2;
+ ?column? | ?column?
+----------+----------
+ 0 | 0
+ 0 | 0
+ 1 | 1
+ 1 | 1
+ 2 | 2
+ 2 | 2
+ 3 | 3
+ 3 | 3
+ 4 | 4
+ 4 | 4
+(10 rows)
+
+-- group expression w/ target under ambiguous condition
+-- failure NOT expected
+SELECT a/2, a/2 FROM test_missing_target
+ GROUP BY a/2;
+ ?column? | ?column?
+----------+----------
+ 0 | 0
+ 1 | 1
+ 2 | 2
+ 3 | 3
+ 4 | 4
+(5 rows)
+
+-- group w/ existing GROUP BY target under ambiguous condition
+SELECT x.b, count(*) FROM test_missing_target x, test_missing_target y
+ WHERE x.a = y.a
+ GROUP BY x.b;
+ b | count
+---+-------
+ 1 | 1
+ 2 | 2
+ 3 | 3
+ 4 | 4
+(4 rows)
+
+-- group w/o existing GROUP BY target under ambiguous condition
+SELECT count(*) FROM test_missing_target x, test_missing_target y
+ WHERE x.a = y.a
+ GROUP BY x.b;
+ count
+-------
+ 1
+ 2
+ 3
+ 4
+(4 rows)
+
+-- group w/o existing GROUP BY target under ambiguous condition
+-- into a table
+SELECT count(*) INTO TABLE test_missing_target2
+FROM test_missing_target x, test_missing_target y
+ WHERE x.a = y.a
+ GROUP BY x.b;
+SELECT * FROM test_missing_target2;
+ count
+-------
+ 1
+ 2
+ 3
+ 4
+(4 rows)
+
+-- Functions and expressions
+-- w/ existing GROUP BY target
+SELECT a%2, count(b) FROM test_missing_target GROUP BY test_missing_target.a%2;
+ ?column? | count
+----------+-------
+ 0 | 5
+ 1 | 5
+(2 rows)
+
+-- w/o existing GROUP BY target using a relation name in GROUP BY clause
+SELECT count(c) FROM test_missing_target GROUP BY lower(test_missing_target.c);
+ count
+-------
+ 2
+ 3
+ 4
+ 1
+(4 rows)
+
+-- w/o existing GROUP BY target and w/o existing a different ORDER BY target
+-- failure expected
+SELECT count(a) FROM test_missing_target GROUP BY a ORDER BY b;
+ERROR: Attribute test_missing_target.b must be GROUPed or used in an aggregate function
+-- w/o existing GROUP BY target and w/o existing same ORDER BY target
+SELECT count(b) FROM test_missing_target GROUP BY b/2 ORDER BY b/2;
+ count
+-------
+ 1
+ 5
+ 4
+(3 rows)
+
+-- w/ existing GROUP BY target using a relation name in target
+SELECT lower(test_missing_target.c), count(c)
+ FROM test_missing_target GROUP BY lower(c) ORDER BY lower(c);
+ lower | count
+----------+-------
+ aaaa | 2
+ bbbb | 3
+ cccc | 4
+ xxxx | 1
+(4 rows)
+
+-- w/o existing GROUP BY target
+SELECT a FROM test_missing_target ORDER BY upper(d);
+ a
+---
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+(10 rows)
+
+-- w/o existing ORDER BY target
+SELECT count(b) FROM test_missing_target
+ GROUP BY (b + 1) / 2 ORDER BY (b + 1) / 2 desc;
+ count
+-------
+ 7
+ 3
+(2 rows)
+
+-- group w/o existing GROUP BY and ORDER BY target under ambiguous condition
+-- failure expected
+SELECT count(x.a) FROM test_missing_target x, test_missing_target y
+ WHERE x.a = y.a
+ GROUP BY b/2 ORDER BY b/2;
+ERROR: Column reference "b" is ambiguous
+-- group w/ existing GROUP BY target under ambiguous condition
+SELECT x.b/2, count(x.b) FROM test_missing_target x, test_missing_target y
+ WHERE x.a = y.a
+ GROUP BY x.b/2;
+ ?column? | count
+----------+-------
+ 0 | 1
+ 1 | 5
+ 2 | 4
+(3 rows)
+
+-- group w/o existing GROUP BY target under ambiguous condition
+-- failure expected due to ambiguous b in count(b)
+SELECT count(b) FROM test_missing_target x, test_missing_target y
+ WHERE x.a = y.a
+ GROUP BY x.b/2;
+ERROR: Column reference "b" is ambiguous
+-- group w/o existing GROUP BY target under ambiguous condition
+-- into a table
+SELECT count(x.b) INTO TABLE test_missing_target3
+FROM test_missing_target x, test_missing_target y
+ WHERE x.a = y.a
+ GROUP BY x.b/2;
+SELECT * FROM test_missing_target3;
+ count
+-------
+ 1
+ 5
+ 4
+(3 rows)
+
+-- Cleanup
+DROP TABLE test_missing_target;
+DROP TABLE test_missing_target2;
+DROP TABLE test_missing_target3;
diff --git a/src/test/regress/expected/select_views_1.out b/src/test/regress/expected/select_views_1.out
new file mode 100644
index 00000000000..660b3f37ac3
--- /dev/null
+++ b/src/test/regress/expected/select_views_1.out
@@ -0,0 +1,1249 @@
+--
+-- SELECT_VIEWS
+-- test the views defined in CREATE_VIEWS
+--
+SELECT * FROM street;
+ name | thepath | cname
+------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------
+ Access Rd 25 | [(-121.9283,37.894),(-121.9283,37.9)] | Oakland
+ Agua Fria Creek | [(-121.9254,37.922),(-121.9281,37.889)] | Oakland
+ Andrea Cir | [(-121.733218,37.88641),(-121.733286,37.90617)] | Oakland
+ Apricot Lane | [(-121.9471,37.401),(-121.9456,37.392)] | Oakland
+ Arlington Dr | [(-121.8802,37.408),(-121.8807,37.394)] | Oakland
+ Arlington Road | [(-121.7957,37.898),(-121.7956,37.906)] | Oakland
+ Arroyo Las Positas | [(-121.7973,37.997),(-121.7957,37.005)] | Oakland
+ Arroyo Seco | [(-121.7073,37.766),(-121.6997,37.729)] | Oakland
+ Calaveras Creek | [(-121.8203,37.035),(-121.8207,37.931)] | Oakland
+ Corriea Way | [(-121.9501,37.402),(-121.9505,37.398)] | Oakland
+ Cowing Road | [(-122.0002,37.934),(-121.9772,37.782)] | Oakland
+ Driscoll Road | [(-121.9482,37.403),(-121.948451,37.39995)] | Oakland
+ Enos Way | [(-121.7677,37.896),(-121.7673,37.91)] | Oakland
+ Fairview Ave | [(-121.999,37.428),(-121.9863,37.351)] | Oakland
+ I- 580 | [(-121.9322,37.989),(-121.9243,37.006),(-121.9217,37.014)] | Oakland
+ I- 580 | [(-122.018,37.019),(-122.0009,37.032),(-121.9787,37.983),(-121.958,37.984),(-121.9571,37.986)] | Oakland
+ I- 580 Ramp | [(-121.8521,37.011),(-121.8479,37.999),(-121.8476,37.999),(-121.8456,37.01),(-121.8455,37.011)] | Oakland
+ I- 580 Ramp | [(-121.8743,37.014),(-121.8722,37.999),(-121.8714,37.999)] | Oakland
+ I- 580 Ramp | [(-121.9043,37.998),(-121.9036,37.013),(-121.902632,37.0174),(-121.9025,37.018)] | Oakland
+ I- 580 Ramp | [(-121.9368,37.986),(-121.936483,37.98832),(-121.9353,37.997),(-121.93504,37.00035),(-121.9346,37.006),(-121.933764,37.00031),(-121.9333,37.997),(-121.9322,37.989)] | Oakland
+ I- 580/I-680 Ramp | ((-121.9207,37.988),(-121.9192,37.016)) | Oakland
+ I- 680 | ((-121.939,37.15),(-121.9387,37.145),(-121.9373,37.125),(-121.934242,37.07643),(-121.933886,37.0709),(-121.9337,37.068),(-121.933122,37.06139),(-121.932736,37.05698),(-121.93222,37.05108),(-121.931844,37.04678),(-121.930113,37.027),(-121.926829,37),(-121.9265,37.998),(-121.9217,37.96),(-121.9203,37.949),(-121.9184,37.934)) | Oakland
+ I- 680 | [(-121.9101,37.715),(-121.911269,37.74682),(-121.9119,37.764),(-121.9124,37.776),(-121.9174,37.905),(-121.9194,37.957),(-121.9207,37.988)] | Oakland
+ I- 680 | [(-121.9184,37.934),(-121.917,37.913),(-121.9122,37.83),(-121.9052,37.702)] | Oakland
+ I- 680 Ramp | [(-121.8833,37.376),(-121.8833,37.392),(-121.883,37.4),(-121.8835,37.402),(-121.8852,37.422)] | Oakland
+ I- 680 Ramp | [(-121.92,37.438),(-121.9218,37.424),(-121.9238,37.408),(-121.9252,37.392)] | Oakland
+ I- 680 Ramp | [(-121.9238,37.402),(-121.9234,37.395),(-121.923,37.399)] | Oakland
+ I- 880 | ((-121.9669,37.075),(-121.9663,37.071),(-121.9656,37.065),(-121.9618,37.037),(-121.95689,37),(-121.948,37.933)) | Oakland
+ I- 880 | [(-121.948,37.933),(-121.9471,37.925),(-121.9467,37.923),(-121.946,37.918),(-121.9452,37.912),(-121.937,37.852)] | Oakland
+ Johnson Dr | [(-121.9145,37.901),(-121.915,37.877)] | Oakland
+ Juniper St | [(-121.7823,37.897),(-121.7815,37.9)] | Oakland
+ Las Positas Road | [(-121.764488,37.99199),(-121.75569,37.02022)] | Oakland
+ Livermore Ave | [(-121.7687,37.448),(-121.769,37.375)] | Oakland
+ Livermore Ave | [(-121.772719,37.99085),(-121.7728,37.001)] | Oakland
+ Mission Blvd | [(-121.918886,37),(-121.9194,37.976),(-121.9198,37.975)] | Oakland
+ Mission Blvd | [(-122.0006,37.896),(-121.9989,37.88)] | Oakland
+ Navajo Ct | [(-121.8779,37.901),(-121.8783,37.9)] | Oakland
+ Paseo Padre Pkwy | [(-122.0021,37.639),(-121.996,37.628)] | Oakland
+ Pimlico Dr | [(-121.8616,37.998),(-121.8618,37.008)] | Oakland
+ Rosedale Ct | [(-121.9232,37.9),(-121.924,37.897)] | Oakland
+ Saginaw Ct | [(-121.8803,37.898),(-121.8806,37.901)] | Oakland
+ Sp Railroad | [(-121.893564,37.99009),(-121.897,37.016)] | Oakland
+ Sp Railroad | [(-121.9565,37.898),(-121.9562,37.9)] | Oakland
+ State Hwy 84 | [(-121.9565,37.898),(-121.956589,37.89911),(-121.9569,37.903),(-121.956,37.91),(-121.9553,37.919)] | Oakland
+ Sunol Ridge Trl | [(-121.9419,37.455),(-121.9345,37.38)] | Oakland
+ Tassajara Creek | [(-121.87866,37.98898),(-121.8782,37.015)] | Oakland
+ Theresa Way | [(-121.7289,37.906),(-121.728,37.899)] | Oakland
+ Tissiack Way | [(-121.920364,37),(-121.9208,37.995)] | Oakland
+ Vallecitos Road | [(-121.8699,37.916),(-121.8703,37.891)] | Oakland
+ Warm Springs Blvd | [(-121.933956,37),(-121.9343,37.97)] | Oakland
+ Welch Creek Road | [(-121.7695,37.386),(-121.7737,37.413)] | Oakland
+ Whitlock Creek | [(-121.74683,37.91276),(-121.733107,37)] | Oakland
+ 1st St | [(-121.75508,37.89294),(-121.753581,37.90031)] | Oakland
+ Apricot Lane | [(-121.9471,37.401),(-121.9456,37.392)] | Oakland
+ Arden Road | [(-122.0978,37.177),(-122.1,37.177)] | Oakland
+ Arlington Dr | [(-121.8802,37.408),(-121.8807,37.394)] | Oakland
+ Arroyo Las Positas | [(-121.7973,37.997),(-121.7957,37.005)] | Oakland
+ Ash St | [(-122.0408,37.31),(-122.04,37.292)] | Oakland
+ Bridgepointe Dr | [(-122.0514,37.305),(-122.0509,37.299)] | Oakland
+ Butterfield Dr | [(-122.0838,37.002),(-122.0834,37.987)] | Oakland
+ Calaveras Creek | [(-121.8203,37.035),(-121.8207,37.931)] | Oakland
+ Celia St | [(-122.0611,37.3),(-122.0616,37.299)] | Oakland
+ Claremont Pl | [(-122.0542,37.995),(-122.0542,37.008)] | Oakland
+ Corriea Way | [(-121.9501,37.402),(-121.9505,37.398)] | Oakland
+ Crystaline Dr | [(-121.925856,37),(-121.925869,37.00527)] | Oakland
+ Decoto Road | [(-122.0159,37.006),(-122.016,37.002),(-122.0164,37.993)] | Oakland
+ Driscoll Road | [(-121.9482,37.403),(-121.948451,37.39995)] | Oakland
+ Eden Creek | [(-122.022037,37.00675),(-122.0221,37.998)] | Oakland
+ Fairview Ave | [(-121.999,37.428),(-121.9863,37.351)] | Oakland
+ Hesperian Blvd | [(-122.097,37.333),(-122.0956,37.31),(-122.0946,37.293)] | Oakland
+ I- 580 | [(-121.727,37.074),(-121.7229,37.093),(-121.722301,37.09522),(-121.721001,37.10005),(-121.7194,37.106),(-121.7188,37.109),(-121.7168,37.12),(-121.7163,37.123),(-121.7145,37.127),(-121.7096,37.148),(-121.707731,37.1568),(-121.7058,37.166),(-121.7055,37.168),(-121.7044,37.174),(-121.7038,37.172),(-121.7037,37.172),(-121.7027,37.175),(-121.7001,37.181),(-121.6957,37.191),(-121.6948,37.192),(-121.6897,37.204),(-121.6697,37.185)] | Oakland
+ I- 580 | [(-121.9322,37.989),(-121.9243,37.006),(-121.9217,37.014)] | Oakland
+ I- 580 | [(-122.018,37.019),(-122.0009,37.032),(-121.9787,37.983),(-121.958,37.984),(-121.9571,37.986)] | Oakland
+ I- 580 Ramp | [(-121.8521,37.011),(-121.8479,37.999),(-121.8476,37.999),(-121.8456,37.01),(-121.8455,37.011)] | Oakland
+ I- 580 Ramp | [(-121.8743,37.014),(-121.8722,37.999),(-121.8714,37.999)] | Oakland
+ I- 580 Ramp | [(-121.9043,37.998),(-121.9036,37.013),(-121.902632,37.0174),(-121.9025,37.018)] | Oakland
+ I- 580 Ramp | [(-121.9368,37.986),(-121.936483,37.98832),(-121.9353,37.997),(-121.93504,37.00035),(-121.9346,37.006),(-121.933764,37.00031),(-121.9333,37.997),(-121.9322,37.989)] | Oakland
+ I- 580/I-680 Ramp | ((-121.9207,37.988),(-121.9192,37.016)) | Oakland
+ I- 680 | ((-121.939,37.15),(-121.9387,37.145),(-121.9373,37.125),(-121.934242,37.07643),(-121.933886,37.0709),(-121.9337,37.068),(-121.933122,37.06139),(-121.932736,37.05698),(-121.93222,37.05108),(-121.931844,37.04678),(-121.930113,37.027),(-121.926829,37),(-121.9265,37.998),(-121.9217,37.96),(-121.9203,37.949),(-121.9184,37.934)) | Oakland
+ I- 680 Ramp | [(-121.8833,37.376),(-121.8833,37.392),(-121.883,37.4),(-121.8835,37.402),(-121.8852,37.422)] | Oakland
+ I- 680 Ramp | [(-121.92,37.438),(-121.9218,37.424),(-121.9238,37.408),(-121.9252,37.392)] | Oakland
+ I- 680 Ramp | [(-121.9238,37.402),(-121.9234,37.395),(-121.923,37.399)] | Oakland
+ I- 880 | ((-121.9669,37.075),(-121.9663,37.071),(-121.9656,37.065),(-121.9618,37.037),(-121.95689,37),(-121.948,37.933)) | Oakland
+ I- 880 | [(-122.0612,37.003),(-122.0604,37.991),(-122.0596,37.982),(-122.0585,37.967),(-122.0583,37.961),(-122.0553,37.918),(-122.053635,37.89475),(-122.050759,37.8546),(-122.05,37.844),(-122.0485,37.817),(-122.0483,37.813),(-122.0482,37.811)] | Oakland
+ I- 880 | [(-122.0831,37.312),(-122.0819,37.296),(-122.081,37.285),(-122.0786,37.248),(-122.078,37.24),(-122.077642,37.23496),(-122.076983,37.22567),(-122.076599,37.22026),(-122.076229,37.21505),(-122.0758,37.209)] | Oakland
+ I- 880 Ramp | [(-122.0019,37.301),(-122.002,37.293)] | Oakland
+ I- 880 Ramp | [(-122.0041,37.313),(-122.0018,37.315),(-122.0007,37.315),(-122.0005,37.313),(-122.0002,37.308),(-121.9995,37.289)] | Oakland
+ I- 880 Ramp | [(-122.0041,37.313),(-122.0038,37.308),(-122.0039,37.284),(-122.0013,37.287),(-121.9995,37.289)] | Oakland
+ I- 880 Ramp | [(-122.059,37.982),(-122.0577,37.984),(-122.0612,37.003)] | Oakland
+ I- 880 Ramp | [(-122.0618,37.011),(-122.0631,37.982),(-122.0585,37.967)] | Oakland
+ I- 880 Ramp | [(-122.085,37.34),(-122.0801,37.316),(-122.081,37.285)] | Oakland
+ I- 880 Ramp | [(-122.085,37.34),(-122.0866,37.316),(-122.0819,37.296)] | Oakland
+ Kildare Road | [(-122.0968,37.016),(-122.0959,37)] | Oakland
+ Las Positas Road | [(-121.764488,37.99199),(-121.75569,37.02022)] | Oakland
+ Livermore Ave | [(-121.7687,37.448),(-121.769,37.375)] | Oakland
+ Livermore Ave | [(-121.772719,37.99085),(-121.7728,37.001)] | Oakland
+ Mildred Ct | [(-122.0002,37.388),(-121.9998,37.386)] | Oakland
+ Miramar Ave | [(-122.1009,37.025),(-122.099089,37.03209)] | Oakland
+ Mission Blvd | [(-121.918886,37),(-121.9194,37.976),(-121.9198,37.975)] | Oakland
+ Moores Ave | [(-122.0087,37.301),(-122.0094,37.292)] | Oakland
+ Oakridge Road | [(-121.8316,37.049),(-121.828382,37)] | Oakland
+ Paseo Padre Pkwy | [(-121.9143,37.005),(-121.913522,37)] | Oakland
+ Periwinkle Road | [(-122.0451,37.301),(-122.044758,37.29844)] | Oakland
+ Pimlico Dr | [(-121.8616,37.998),(-121.8618,37.008)] | Oakland
+ Railroad Ave | [(-122.0245,37.013),(-122.0234,37.003),(-122.0223,37.993)] | Oakland
+ Ranspot Dr | [(-122.0972,37.999),(-122.0959,37)] | Oakland
+ Santa Maria Ave | [(-122.0773,37),(-122.0773,37.98)] | Oakland
+ Sp Railroad | [(-121.893564,37.99009),(-121.897,37.016)] | Oakland
+ Sp Railroad | [(-122.0734,37.001),(-122.0734,37.997)] | Oakland
+ Stanton Ave | [(-122.100392,37.0697),(-122.099513,37.06052)] | Oakland
+ Sunol Ridge Trl | [(-121.9419,37.455),(-121.9345,37.38)] | Oakland
+ Tassajara Creek | [(-121.87866,37.98898),(-121.8782,37.015)] | Oakland
+ Thackeray Ave | [(-122.072,37.305),(-122.0715,37.298)] | Oakland
+ Tissiack Way | [(-121.920364,37),(-121.9208,37.995)] | Oakland
+ Warm Springs Blvd | [(-121.933956,37),(-121.9343,37.97)] | Oakland
+ Welch Creek Road | [(-121.7695,37.386),(-121.7737,37.413)] | Oakland
+ Western Pacific Railroad Spur | [(-122.0394,37.018),(-122.0394,37.961)] | Oakland
+ Whitlock Creek | [(-121.74683,37.91276),(-121.733107,37)] | Oakland
+ Avenue 134th | [(-122.1823,37.002),(-122.1851,37.992)] | Oakland
+ Avenue 140th | [(-122.1656,37.003),(-122.1691,37.988)] | Oakland
+ B St | [(-122.1749,37.451),(-122.1743,37.443)] | Oakland
+ Bancroft Ave | [(-122.15714,37.4242),(-122.156,37.409)] | Oakland
+ Bancroft Ave | [(-122.1643,37.523),(-122.1631,37.508),(-122.1621,37.493)] | Oakland
+ Birch St | [(-122.1617,37.425),(-122.1614,37.417)] | Oakland
+ Birch St | [(-122.1673,37.509),(-122.1661,37.492)] | Oakland
+ Blacow Road | [(-122.0179,37.469),(-122.0167,37.465)] | Oakland
+ Broadmore Ave | [(-122.095,37.522),(-122.0936,37.497)] | Oakland
+ Butterfield Dr | [(-122.0838,37.002),(-122.0834,37.987)] | Oakland
+ C St | [(-122.1768,37.46),(-122.1749,37.435)] | Oakland
+ Cameron Ave | [(-122.1316,37.502),(-122.1327,37.481)] | Oakland
+ Cedar Blvd | [(-122.0282,37.446),(-122.0265,37.43)] | Oakland
+ Chapman Dr | [(-122.0421,37.504),(-122.0414,37.498)] | Oakland
+ Charles St | [(-122.0255,37.505),(-122.0252,37.499)] | Oakland
+ Cherry St | [(-122.0437,37.42),(-122.0434,37.413)] | Oakland
+ Claremont Pl | [(-122.0542,37.995),(-122.0542,37.008)] | Oakland
+ Coliseum Way | [(-122.2001,37.47),(-122.1978,37.516)] | Oakland
+ Cull Canyon Road | [(-122.0536,37.435),(-122.0499,37.315)] | Oakland
+ D St | [(-122.1811,37.505),(-122.1805,37.497)] | Oakland
+ Decoto Road | [(-122.0159,37.006),(-122.016,37.002),(-122.0164,37.993)] | Oakland
+ Driftwood Dr | [(-122.0109,37.482),(-122.0113,37.477)] | Oakland
+ E St | [(-122.1832,37.505),(-122.1826,37.498),(-122.182,37.49)] | Oakland
+ Eden Ave | [(-122.1143,37.505),(-122.1142,37.491)] | Oakland
+ Eden Creek | [(-122.022037,37.00675),(-122.0221,37.998)] | Oakland
+ Gading Road | [(-122.0801,37.343),(-122.08,37.336)] | Oakland
+ Harris Road | [(-122.0659,37.372),(-122.0675,37.363)] | Oakland
+ Hegenberger Exwy | [(-122.1946,37.52),(-122.1947,37.497)] | Oakland
+ Herrier St | [(-122.1943,37.006),(-122.1936,37.998)] | Oakland
+ Hesperian Blvd | [(-122.097,37.333),(-122.0956,37.31),(-122.0946,37.293)] | Oakland
+ I- 580 | [(-122.1108,37.023),(-122.1101,37.02),(-122.108103,37.00764),(-122.108,37.007),(-122.1069,37.998),(-122.1064,37.994),(-122.1053,37.982),(-122.1048,37.977),(-122.1032,37.958),(-122.1026,37.953),(-122.1013,37.938),(-122.0989,37.911),(-122.0984,37.91),(-122.098,37.908)] | Oakland
+ I- 580 | [(-122.1543,37.703),(-122.1535,37.694),(-122.1512,37.655),(-122.1475,37.603),(-122.1468,37.583),(-122.1472,37.569),(-122.149044,37.54874),(-122.1493,37.546),(-122.1501,37.532),(-122.1506,37.509),(-122.1495,37.482),(-122.1487,37.467),(-122.1477,37.447),(-122.1414,37.383),(-122.1404,37.376),(-122.1398,37.372),(-122.139,37.356),(-122.1388,37.353),(-122.1385,37.34),(-122.1382,37.33),(-122.1378,37.316)] | Oakland
+ I- 580 Ramp | [(-122.1086,37.003),(-122.1068,37.993),(-122.1066,37.992),(-122.1053,37.982)] | Oakland
+ I- 580 Ramp | [(-122.1414,37.383),(-122.1407,37.376),(-122.1403,37.372),(-122.139,37.356)] | Oakland
+ I- 880 | [(-122.0219,37.466),(-122.0205,37.447),(-122.020331,37.44447),(-122.020008,37.43962),(-122.0195,37.432),(-122.0193,37.429),(-122.0164,37.393),(-122.010219,37.34771),(-122.0041,37.313)] | Oakland
+ I- 880 | [(-122.0375,37.632),(-122.0359,37.619),(-122.0358,37.616),(-122.034514,37.60409),(-122.031876,37.57965),(-122.031193,37.57332),(-122.03016,37.56375),(-122.02943,37.55698),(-122.028689,37.54929),(-122.027833,37.53908),(-122.025979,37.51698),(-122.0238,37.491)] | Oakland
+ I- 880 | [(-122.0612,37.003),(-122.0604,37.991),(-122.0596,37.982),(-122.0585,37.967),(-122.0583,37.961),(-122.0553,37.918),(-122.053635,37.89475),(-122.050759,37.8546),(-122.05,37.844),(-122.0485,37.817),(-122.0483,37.813),(-122.0482,37.811)] | Oakland
+ I- 880 | [(-122.0978,37.528),(-122.096,37.496),(-122.0931,37.453),(-122.09277,37.4496),(-122.090189,37.41442),(-122.0896,37.405),(-122.085,37.34)] | Oakland
+ I- 880 | [(-122.1755,37.185),(-122.1747,37.178),(-122.1742,37.173),(-122.1692,37.126),(-122.167792,37.11594),(-122.16757,37.11435),(-122.1671,37.111),(-122.1655,37.1),(-122.165169,37.09811),(-122.1641,37.092),(-122.1596,37.061),(-122.158381,37.05275),(-122.155991,37.03657),(-122.1531,37.017),(-122.1478,37.98),(-122.1407,37.932),(-122.1394,37.924),(-122.1389,37.92),(-122.1376,37.91)] | Oakland
+ I- 880 Ramp | [(-122.0236,37.488),(-122.0231,37.458),(-122.0227,37.458),(-122.0223,37.452),(-122.0205,37.447)] | Oakland
+ I- 880 Ramp | [(-122.0238,37.491),(-122.0215,37.483),(-122.0211,37.477),(-122.0205,37.447)] | Oakland
+ I- 880 Ramp | [(-122.059,37.982),(-122.0577,37.984),(-122.0612,37.003)] | Oakland
+ I- 880 Ramp | [(-122.0618,37.011),(-122.0631,37.982),(-122.0585,37.967)] | Oakland
+ I- 880 Ramp | [(-122.085,37.34),(-122.0801,37.316),(-122.081,37.285)] | Oakland
+ I- 880 Ramp | [(-122.085,37.34),(-122.0866,37.316),(-122.0819,37.296)] | Oakland
+ Kaiser Dr | [(-122.067163,37.47821),(-122.060402,37.51961)] | Oakland
+ La Playa Dr | [(-122.1039,37.545),(-122.101,37.493)] | Oakland
+ Locust St | [(-122.1606,37.007),(-122.1593,37.987)] | Oakland
+ Logan Ct | [(-122.0053,37.492),(-122.0061,37.484)] | Oakland
+ Magnolia St | [(-122.0971,37.5),(-122.0962,37.484)] | Oakland
+ Mattos Dr | [(-122.0005,37.502),(-122.000898,37.49683)] | Oakland
+ Maubert Ave | [(-122.1114,37.009),(-122.1096,37.995)] | Oakland
+ McClure Ave | [(-122.1431,37.001),(-122.1436,37.998)] | Oakland
+ Medlar Dr | [(-122.0627,37.378),(-122.0625,37.375)] | Oakland
+ National Ave | [(-122.1192,37.5),(-122.1281,37.489)] | Oakland
+ Newark Blvd | [(-122.0352,37.438),(-122.0341,37.423)] | Oakland
+ Portsmouth Ave | [(-122.1064,37.315),(-122.1064,37.308)] | Oakland
+ Railroad Ave | [(-122.0245,37.013),(-122.0234,37.003),(-122.0223,37.993)] | Oakland
+ Ranspot Dr | [(-122.0972,37.999),(-122.0959,37)] | Oakland
+ Redwood Road | [(-122.1493,37.98),(-122.1437,37.001)] | Oakland
+ Santa Maria Ave | [(-122.0773,37),(-122.0773,37.98)] | Oakland
+ Skyline Blvd | [(-122.1738,37.01),(-122.1714,37.996)] | Oakland
+ Skyline Dr | [(-122.0277,37.5),(-122.0284,37.498)] | Oakland
+ Sp Railroad | [(-122.0734,37.001),(-122.0734,37.997)] | Oakland
+ Sp Railroad | [(-122.137792,37.003),(-122.1365,37.992),(-122.131257,37.94612)] | Oakland
+ Sp Railroad | [(-122.1947,37.497),(-122.193328,37.4848)] | Oakland
+ State Hwy 84 | [(-122.0671,37.426),(-122.07,37.402),(-122.074,37.37),(-122.0773,37.338)] | Oakland
+ State Hwy 92 | [(-122.1085,37.326),(-122.1095,37.322),(-122.1111,37.316),(-122.1119,37.313),(-122.1125,37.311),(-122.1131,37.308),(-122.1167,37.292),(-122.1187,37.285),(-122.12,37.28)] | Oakland
+ State Hwy 92 Ramp | [(-122.1086,37.321),(-122.1089,37.315),(-122.1111,37.316)] | Oakland
+ Tennyson Road | [(-122.0891,37.317),(-122.0927,37.317)] | Oakland
+ Western Pacific Railroad Spur | [(-122.0394,37.018),(-122.0394,37.961)] | Oakland
+ Willimet Way | [(-122.0964,37.517),(-122.0949,37.493)] | Oakland
+ Wisconsin St | [(-122.1994,37.017),(-122.1975,37.998),(-122.1971,37.994)] | Oakland
+ 100th Ave | [(-122.1657,37.429),(-122.1647,37.432)] | Oakland
+ 107th Ave | [(-122.1555,37.403),(-122.1531,37.41)] | Oakland
+ 85th Ave | [(-122.1877,37.466),(-122.186,37.476)] | Oakland
+ 89th Ave | [(-122.1822,37.459),(-122.1803,37.471)] | Oakland
+ 98th Ave | [(-122.1568,37.498),(-122.1558,37.502)] | Oakland
+ 98th Ave | [(-122.1693,37.438),(-122.1682,37.444)] | Oakland
+ Allen Ct | [(-122.0131,37.602),(-122.0117,37.597)] | Berkeley
+ Alvarado Niles Road | [(-122.0325,37.903),(-122.0316,37.9)] | Berkeley
+ Arizona St | [(-122.0381,37.901),(-122.0367,37.898)] | Berkeley
+ Avenue 134th | [(-122.1823,37.002),(-122.1851,37.992)] | Berkeley
+ Avenue 140th | [(-122.1656,37.003),(-122.1691,37.988)] | Berkeley
+ Avenue D | [(-122.298,37.848),(-122.3024,37.849)] | Berkeley
+ Broadway | [(-122.2409,37.586),(-122.2395,37.601)] | Berkeley
+ Buckingham Blvd | [(-122.2231,37.59),(-122.2214,37.606)] | Berkeley
+ Butterfield Dr | [(-122.0838,37.002),(-122.0834,37.987)] | Berkeley
+ California St | [(-122.2032,37.005),(-122.2016,37.996)] | Berkeley
+ Campus Dr | [(-122.1704,37.905),(-122.1678,37.868),(-122.1671,37.865)] | Berkeley
+ Carson St | [(-122.1846,37.9),(-122.1843,37.901)] | Berkeley
+ Cedar St | [(-122.3011,37.737),(-122.2999,37.739)] | Berkeley
+ Central Ave | [(-122.2343,37.602),(-122.2331,37.595)] | Berkeley
+ Champion St | [(-122.214,37.991),(-122.2147,37.002)] | Berkeley
+ Claremont Pl | [(-122.0542,37.995),(-122.0542,37.008)] | Berkeley
+ Coliseum Way | [(-122.2113,37.626),(-122.2085,37.592),(-122.2063,37.568)] | Berkeley
+ Cornell Ave | [(-122.2956,37.925),(-122.2949,37.906),(-122.2939,37.875)] | Berkeley
+ Creston Road | [(-122.2639,37.002),(-122.2613,37.986),(-122.2602,37.978),(-122.2598,37.973)] | Berkeley
+ Crow Canyon Creek | [(-122.043,37.905),(-122.0368,37.71)] | Berkeley
+ Cull Creek | [(-122.0624,37.875),(-122.0582,37.527)] | Berkeley
+ Decoto Road | [(-122.0159,37.006),(-122.016,37.002),(-122.0164,37.993)] | Berkeley
+ Deering St | [(-122.2146,37.904),(-122.2126,37.897)] | Berkeley
+ Dimond Ave | [(-122.2167,37.994),(-122.2162,37.006)] | Berkeley
+ Donna Way | [(-122.1333,37.606),(-122.1316,37.599)] | Berkeley
+ Eden Creek | [(-122.022037,37.00675),(-122.0221,37.998)] | Berkeley
+ Euclid Ave | [(-122.2671,37.009),(-122.2666,37.987)] | Berkeley
+ Foothill Blvd | [(-122.2414,37.9),(-122.2403,37.893)] | Berkeley
+ Fountain St | [(-122.2306,37.593),(-122.2293,37.605)] | Berkeley
+ Grizzly Peak Blvd | [(-122.2213,37.638),(-122.2127,37.581)] | Berkeley
+ Grove Way | [(-122.0643,37.884),(-122.062679,37.89162),(-122.061796,37.89578),(-122.0609,37.9)] | Berkeley
+ Herrier St | [(-122.1943,37.006),(-122.1936,37.998)] | Berkeley
+ Hesperian Blvd | [(-122.1132,37.6),(-122.1123,37.586)] | Berkeley
+ I- 580 | [(-122.1108,37.023),(-122.1101,37.02),(-122.108103,37.00764),(-122.108,37.007),(-122.1069,37.998),(-122.1064,37.994),(-122.1053,37.982),(-122.1048,37.977),(-122.1032,37.958),(-122.1026,37.953),(-122.1013,37.938),(-122.0989,37.911),(-122.0984,37.91),(-122.098,37.908)] | Berkeley
+ I- 580 | [(-122.1543,37.703),(-122.1535,37.694),(-122.1512,37.655),(-122.1475,37.603),(-122.1468,37.583),(-122.1472,37.569),(-122.149044,37.54874),(-122.1493,37.546),(-122.1501,37.532),(-122.1506,37.509),(-122.1495,37.482),(-122.1487,37.467),(-122.1477,37.447),(-122.1414,37.383),(-122.1404,37.376),(-122.1398,37.372),(-122.139,37.356),(-122.1388,37.353),(-122.1385,37.34),(-122.1382,37.33),(-122.1378,37.316)] | Berkeley
+ I- 580 | [(-122.2197,37.99),(-122.22,37.99),(-122.222092,37.99523),(-122.2232,37.998),(-122.224146,37.99963),(-122.2261,37.003),(-122.2278,37.007),(-122.2302,37.026),(-122.2323,37.043),(-122.2344,37.059),(-122.235405,37.06427),(-122.2365,37.07)] | Berkeley
+ I- 580 Ramp | [(-122.093241,37.90351),(-122.09364,37.89634),(-122.093788,37.89212)] | Berkeley
+ I- 580 Ramp | [(-122.0934,37.896),(-122.09257,37.89961),(-122.0911,37.906)] | Berkeley
+ I- 580 Ramp | [(-122.0941,37.897),(-122.0943,37.902)] | Berkeley
+ I- 580 Ramp | [(-122.096,37.888),(-122.0962,37.891),(-122.0964,37.9)] | Berkeley
+ I- 580 Ramp | [(-122.101,37.898),(-122.1005,37.902),(-122.0989,37.911)] | Berkeley
+ I- 580 Ramp | [(-122.1086,37.003),(-122.1068,37.993),(-122.1066,37.992),(-122.1053,37.982)] | Berkeley
+ I- 880 | [(-122.0375,37.632),(-122.0359,37.619),(-122.0358,37.616),(-122.034514,37.60409),(-122.031876,37.57965),(-122.031193,37.57332),(-122.03016,37.56375),(-122.02943,37.55698),(-122.028689,37.54929),(-122.027833,37.53908),(-122.025979,37.51698),(-122.0238,37.491)] | Berkeley
+ I- 880 | [(-122.0612,37.003),(-122.0604,37.991),(-122.0596,37.982),(-122.0585,37.967),(-122.0583,37.961),(-122.0553,37.918),(-122.053635,37.89475),(-122.050759,37.8546),(-122.05,37.844),(-122.0485,37.817),(-122.0483,37.813),(-122.0482,37.811)] | Berkeley
+ I- 880 | [(-122.1365,37.902),(-122.1358,37.898),(-122.1333,37.881),(-122.1323,37.874),(-122.1311,37.866),(-122.1308,37.865),(-122.1307,37.864),(-122.1289,37.851),(-122.1277,37.843),(-122.1264,37.834),(-122.1231,37.812),(-122.1165,37.766),(-122.1104,37.72),(-122.109695,37.71094),(-122.109,37.702),(-122.108312,37.69168),(-122.1076,37.681)] | Berkeley
+ I- 880 | [(-122.1755,37.185),(-122.1747,37.178),(-122.1742,37.173),(-122.1692,37.126),(-122.167792,37.11594),(-122.16757,37.11435),(-122.1671,37.111),(-122.1655,37.1),(-122.165169,37.09811),(-122.1641,37.092),(-122.1596,37.061),(-122.158381,37.05275),(-122.155991,37.03657),(-122.1531,37.017),(-122.1478,37.98),(-122.1407,37.932),(-122.1394,37.924),(-122.1389,37.92),(-122.1376,37.91)] | Berkeley
+ I- 880 | [(-122.2214,37.711),(-122.2202,37.699),(-122.2199,37.695),(-122.219,37.682),(-122.2184,37.672),(-122.2173,37.652),(-122.2159,37.638),(-122.2144,37.616),(-122.2138,37.612),(-122.2135,37.609),(-122.212,37.592),(-122.2116,37.586),(-122.2111,37.581)] | Berkeley
+ I- 880 | [(-122.2707,37.975),(-122.2693,37.972),(-122.2681,37.966),(-122.267,37.962),(-122.2659,37.957),(-122.2648,37.952),(-122.2636,37.946),(-122.2625,37.935),(-122.2617,37.927),(-122.2607,37.921),(-122.2593,37.916),(-122.258,37.911),(-122.2536,37.898),(-122.2432,37.858),(-122.2408,37.845),(-122.2386,37.827),(-122.2374,37.811)] | Berkeley
+ I- 880 Ramp | [(-122.059,37.982),(-122.0577,37.984),(-122.0612,37.003)] | Berkeley
+ I- 880 Ramp | [(-122.0618,37.011),(-122.0631,37.982),(-122.0585,37.967)] | Berkeley
+ I- 880 Ramp | [(-122.1029,37.61),(-122.1013,37.587),(-122.0999,37.569)] | Berkeley
+ I- 880 Ramp | [(-122.1379,37.891),(-122.1383,37.897),(-122.1377,37.902)] | Berkeley
+ I- 880 Ramp | [(-122.1379,37.931),(-122.137597,37.92736),(-122.1374,37.925),(-122.1373,37.924),(-122.1369,37.914),(-122.1358,37.905),(-122.1365,37.908),(-122.1358,37.898)] | Berkeley
+ I- 880 Ramp | [(-122.2536,37.898),(-122.254,37.902)] | Berkeley
+ Jackson St | [(-122.0845,37.6),(-122.0842,37.606)] | Berkeley
+ Joyce St | [(-122.0792,37.604),(-122.0774,37.581)] | Berkeley
+ Keeler Ave | [(-122.2578,37.906),(-122.2579,37.899)] | Berkeley
+ Laguna Ave | [(-122.2099,37.989),(-122.2089,37)] | Berkeley
+ Lakehurst Cir | [(-122.284729,37.89025),(-122.286096,37.90364)] | Berkeley
+ Lakeshore Ave | [(-122.2586,37.99),(-122.2556,37.006)] | Berkeley
+ Linden St | [(-122.2867,37.998),(-122.2864,37.008)] | Berkeley
+ Locust St | [(-122.1606,37.007),(-122.1593,37.987)] | Berkeley
+ Marin Ave | [(-122.2741,37.894),(-122.272,37.901)] | Berkeley
+ Martin Luther King Jr Way | [(-122.2712,37.608),(-122.2711,37.599)] | Berkeley
+ Maubert Ave | [(-122.1114,37.009),(-122.1096,37.995)] | Berkeley
+ McClure Ave | [(-122.1431,37.001),(-122.1436,37.998)] | Berkeley
+ Miller Road | [(-122.0902,37.645),(-122.0865,37.545)] | Berkeley
+ Mission Blvd | [(-122.0006,37.896),(-121.9989,37.88)] | Berkeley
+ Oakland Inner Harbor | [(-122.2625,37.913),(-122.260016,37.89484)] | Berkeley
+ Oneil Ave | [(-122.076754,37.62476),(-122.0745,37.595)] | Berkeley
+ Parkridge Dr | [(-122.1438,37.884),(-122.1428,37.9)] | Berkeley
+ Parkside Dr | [(-122.0475,37.603),(-122.0443,37.596)] | Berkeley
+ Paseo Padre Pkwy | [(-122.0021,37.639),(-121.996,37.628)] | Berkeley
+ Pearl St | [(-122.2383,37.594),(-122.2366,37.615)] | Berkeley
+ Railroad Ave | [(-122.0245,37.013),(-122.0234,37.003),(-122.0223,37.993)] | Berkeley
+ Ranspot Dr | [(-122.0972,37.999),(-122.0959,37)] | Berkeley
+ Redding St | [(-122.1978,37.901),(-122.1975,37.895)] | Berkeley
+ Redwood Road | [(-122.1493,37.98),(-122.1437,37.001)] | Berkeley
+ Roca Dr | [(-122.0335,37.609),(-122.0314,37.599)] | Berkeley
+ Sacramento St | [(-122.2799,37.606),(-122.2797,37.597)] | Berkeley
+ Saddle Brook Dr | [(-122.1478,37.909),(-122.1454,37.904),(-122.1451,37.888)] | Berkeley
+ San Andreas Dr | [(-122.0609,37.9),(-122.0614,37.895)] | Berkeley
+ Santa Maria Ave | [(-122.0773,37),(-122.0773,37.98)] | Berkeley
+ Shattuck Ave | [(-122.2686,37.904),(-122.2686,37.897)] | Berkeley
+ Shoreline Dr | [(-122.2657,37.603),(-122.2648,37.6)] | Berkeley
+ Skyline Blvd | [(-122.1738,37.01),(-122.1714,37.996)] | Berkeley
+ Skywest Dr | [(-122.1161,37.62),(-122.1123,37.586)] | Berkeley
+ Southern Pacific Railroad | [(-122.3002,37.674),(-122.2999,37.661)] | Berkeley
+ Sp Railroad | [(-122.0734,37.001),(-122.0734,37.997)] | Berkeley
+ Sp Railroad | [(-122.0914,37.601),(-122.087,37.56),(-122.086408,37.5551)] | Berkeley
+ Sp Railroad | [(-122.137792,37.003),(-122.1365,37.992),(-122.131257,37.94612)] | Berkeley
+ State Hwy 123 | [(-122.3004,37.986),(-122.2998,37.969),(-122.2995,37.962),(-122.2992,37.952),(-122.299,37.942),(-122.2987,37.935),(-122.2984,37.924),(-122.2982,37.92),(-122.2976,37.904),(-122.297,37.88),(-122.2966,37.869),(-122.2959,37.848),(-122.2961,37.843)] | Berkeley
+ State Hwy 13 | [(-122.1797,37.943),(-122.179871,37.91849),(-122.18,37.9),(-122.179023,37.86615),(-122.1787,37.862),(-122.1781,37.851),(-122.1777,37.845),(-122.1773,37.839),(-122.177,37.833)] | Berkeley
+ State Hwy 238 | ((-122.098,37.908),(-122.0983,37.907),(-122.099,37.905),(-122.101,37.898),(-122.101535,37.89711),(-122.103173,37.89438),(-122.1046,37.892),(-122.106,37.89)) | Berkeley
+ State Hwy 238 Ramp | [(-122.1288,37.9),(-122.1293,37.895),(-122.1296,37.906)] | Berkeley
+ Stuart St | [(-122.2518,37.6),(-122.2507,37.601),(-122.2491,37.606)] | Berkeley
+ Tupelo Ter | [(-122.059087,37.6113),(-122.057021,37.59942)] | Berkeley
+ West Loop Road | [(-122.0576,37.604),(-122.0602,37.586)] | Berkeley
+ Western Pacific Railroad Spur | [(-122.0394,37.018),(-122.0394,37.961)] | Berkeley
+ Wisconsin St | [(-122.1994,37.017),(-122.1975,37.998),(-122.1971,37.994)] | Berkeley
+ Wp Railroad | [(-122.254,37.902),(-122.2506,37.891)] | Berkeley
+ 19th Ave | [(-122.2366,37.897),(-122.2359,37.905)] | Berkeley
+ 5th St | [(-122.296,37.615),(-122.2953,37.598)] | Berkeley
+ 82nd Ave | [(-122.1695,37.596),(-122.1681,37.603)] | Berkeley
+ Ada St | [(-122.2487,37.398),(-122.2496,37.401)] | Lafayette
+ California St | [(-122.2032,37.005),(-122.2016,37.996)] | Lafayette
+ Capricorn Ave | [(-122.2176,37.404),(-122.2164,37.384)] | Lafayette
+ Chambers Dr | [(-122.2004,37.352),(-122.1972,37.368)] | Lafayette
+ Chambers Lane | [(-122.2001,37.359),(-122.1975,37.371)] | Lafayette
+ Champion St | [(-122.214,37.991),(-122.2147,37.002)] | Lafayette
+ Coolidge Ave | [(-122.2007,37.058),(-122.1992,37.06)] | Lafayette
+ Creston Road | [(-122.2639,37.002),(-122.2613,37.986),(-122.2602,37.978),(-122.2598,37.973)] | Lafayette
+ Dimond Ave | [(-122.2167,37.994),(-122.2162,37.006)] | Lafayette
+ Edgewater Dr | [(-122.201,37.379),(-122.2042,37.41)] | Lafayette
+ Euclid Ave | [(-122.2671,37.009),(-122.2666,37.987)] | Lafayette
+ Heartwood Dr | [(-122.2006,37.341),(-122.1992,37.338)] | Lafayette
+ Hollis St | [(-122.2885,37.397),(-122.289,37.414)] | Lafayette
+ I- 580 | [(-122.2197,37.99),(-122.22,37.99),(-122.222092,37.99523),(-122.2232,37.998),(-122.224146,37.99963),(-122.2261,37.003),(-122.2278,37.007),(-122.2302,37.026),(-122.2323,37.043),(-122.2344,37.059),(-122.235405,37.06427),(-122.2365,37.07)] | Lafayette
+ I- 80 | ((-122.2937,37.277),(-122.3016,37.262)) | Lafayette
+ I- 80 | ((-122.2962,37.273),(-122.3004,37.264)) | Lafayette
+ I- 80 Ramp | [(-122.2962,37.413),(-122.2959,37.382),(-122.2951,37.372)] | Lafayette
+ I- 880 Ramp | [(-122.2771,37.002),(-122.278,37)] | Lafayette
+ Indian Way | [(-122.2066,37.398),(-122.2045,37.411)] | Lafayette
+ Laguna Ave | [(-122.2099,37.989),(-122.2089,37)] | Lafayette
+ Lakeshore Ave | [(-122.2586,37.99),(-122.2556,37.006)] | Lafayette
+ Linden St | [(-122.2867,37.998),(-122.2864,37.008)] | Lafayette
+ Mandalay Road | [(-122.2322,37.397),(-122.2321,37.403)] | Lafayette
+ Proctor Ave | [(-122.2267,37.406),(-122.2251,37.386)] | Lafayette
+ Sheridan Road | [(-122.2279,37.425),(-122.2253,37.411),(-122.2223,37.377)] | Lafayette
+ State Hwy 13 | [(-122.2049,37.2),(-122.20328,37.17975),(-122.1989,37.125),(-122.198078,37.11641),(-122.1975,37.11)] | Lafayette
+ State Hwy 13 Ramp | [(-122.2244,37.427),(-122.223,37.414),(-122.2214,37.396),(-122.2213,37.388)] | Lafayette
+ State Hwy 24 | [(-122.2674,37.246),(-122.2673,37.248),(-122.267,37.261),(-122.2668,37.271),(-122.2663,37.298),(-122.2659,37.315),(-122.2655,37.336),(-122.265007,37.35882),(-122.264443,37.37286),(-122.2641,37.381),(-122.2638,37.388),(-122.2631,37.396),(-122.2617,37.405),(-122.2615,37.407),(-122.2605,37.412)] | Lafayette
+ Taurus Ave | [(-122.2159,37.416),(-122.2128,37.389)] | Lafayette
+ 14th St | [(-122.299,37.147),(-122.3,37.148)] | Lafayette
+ 5th St | [(-122.278,37),(-122.2792,37.005),(-122.2803,37.009)] | Lafayette
+ 98th Ave | [(-122.2001,37.258),(-122.1974,37.27)] | Lafayette
+(333 rows)
+
+SELECT name, #thepath FROM iexit ORDER BY 1, 2;
+ name | ?column?
+------------------------------------+----------
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 2
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 3
+ I- 580 | 4
+ I- 580 | 4
+ I- 580 | 4
+ I- 580 | 4
+ I- 580 | 5
+ I- 580 | 5
+ I- 580 | 5
+ I- 580 | 5
+ I- 580 | 5
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 6
+ I- 580 | 7
+ I- 580 | 7
+ I- 580 | 7
+ I- 580 | 7
+ I- 580 | 7
+ I- 580 | 7
+ I- 580 | 7
+ I- 580 | 8
+ I- 580 | 8
+ I- 580 | 8
+ I- 580 | 8
+ I- 580 | 8
+ I- 580 | 8
+ I- 580 | 8
+ I- 580 | 8
+ I- 580 | 8
+ I- 580 | 9
+ I- 580 | 9
+ I- 580 | 9
+ I- 580 | 9
+ I- 580 | 9
+ I- 580 | 12
+ I- 580 | 12
+ I- 580 | 12
+ I- 580 | 12
+ I- 580 | 12
+ I- 580 | 12
+ I- 580 | 12
+ I- 580 | 12
+ I- 580 | 12
+ I- 580 | 12
+ I- 580 | 13
+ I- 580 | 13
+ I- 580 | 13
+ I- 580 | 13
+ I- 580 | 13
+ I- 580 | 13
+ I- 580 | 14
+ I- 580 | 14
+ I- 580 | 14
+ I- 580 | 14
+ I- 580 | 14
+ I- 580 | 14
+ I- 580 | 14
+ I- 580 | 14
+ I- 580 | 18
+ I- 580 | 18
+ I- 580 | 18
+ I- 580 | 18
+ I- 580 | 18
+ I- 580 | 18
+ I- 580 | 21
+ I- 580 | 21
+ I- 580 | 21
+ I- 580 | 21
+ I- 580 | 21
+ I- 580 | 21
+ I- 580 | 21
+ I- 580 | 21
+ I- 580 | 21
+ I- 580 | 21
+ I- 580 | 22
+ I- 580 | 22
+ I- 580/I-680 Ramp | 2
+ I- 580/I-680 Ramp | 2
+ I- 580/I-680 Ramp | 2
+ I- 580/I-680 Ramp | 2
+ I- 580/I-680 Ramp | 2
+ I- 580/I-680 Ramp | 2
+ I- 580/I-680 Ramp | 4
+ I- 580/I-680 Ramp | 4
+ I- 580/I-680 Ramp | 4
+ I- 580/I-680 Ramp | 4
+ I- 580/I-680 Ramp | 5
+ I- 580/I-680 Ramp | 6
+ I- 580/I-680 Ramp | 6
+ I- 580/I-680 Ramp | 6
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 2
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 3
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 4
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 5
+ I- 580 Ramp | 6
+ I- 580 Ramp | 6
+ I- 580 Ramp | 6
+ I- 580 Ramp | 7
+ I- 580 Ramp | 8
+ I- 580 Ramp | 8
+ I- 580 Ramp | 8
+ I- 580 Ramp | 8
+ I- 580 Ramp | 8
+ I- 580 Ramp | 8
+ I- 680 | 2
+ I- 680 | 2
+ I- 680 | 2
+ I- 680 | 2
+ I- 680 | 2
+ I- 680 | 2
+ I- 680 | 2
+ I- 680 | 3
+ I- 680 | 3
+ I- 680 | 3
+ I- 680 | 4
+ I- 680 | 4
+ I- 680 | 4
+ I- 680 | 5
+ I- 680 | 5
+ I- 680 | 5
+ I- 680 | 7
+ I- 680 | 7
+ I- 680 | 7
+ I- 680 | 7
+ I- 680 | 8
+ I- 680 | 8
+ I- 680 | 8
+ I- 680 | 8
+ I- 680 | 10
+ I- 680 | 10
+ I- 680 | 10
+ I- 680 | 10
+ I- 680 | 10
+ I- 680 | 10
+ I- 680 | 10
+ I- 680 | 16
+ I- 680 | 16
+ I- 680 | 16
+ I- 680 | 16
+ I- 680 | 16
+ I- 680 | 16
+ I- 680 | 16
+ I- 680 | 16
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 2
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 3
+ I- 680 Ramp | 4
+ I- 680 Ramp | 4
+ I- 680 Ramp | 4
+ I- 680 Ramp | 5
+ I- 680 Ramp | 5
+ I- 680 Ramp | 5
+ I- 680 Ramp | 5
+ I- 680 Ramp | 5
+ I- 680 Ramp | 5
+ I- 680 Ramp | 6
+ I- 680 Ramp | 6
+ I- 680 Ramp | 6
+ I- 680 Ramp | 6
+ I- 680 Ramp | 7
+ I- 680 Ramp | 7
+ I- 680 Ramp | 7
+ I- 680 Ramp | 7
+ I- 680 Ramp | 8
+ I- 680 Ramp | 8
+ I- 680 Ramp | 8
+ I- 680 Ramp | 8
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 2
+ I- 80 | 3
+ I- 80 | 3
+ I- 80 | 3
+ I- 80 | 4
+ I- 80 | 4
+ I- 80 | 4
+ I- 80 | 4
+ I- 80 | 4
+ I- 80 | 5
+ I- 80 | 5
+ I- 80 | 5
+ I- 80 | 5
+ I- 80 | 5
+ I- 80 | 5
+ I- 80 | 5
+ I- 80 | 5
+ I- 80 | 5
+ I- 80 | 11
+ I- 80 | 11
+ I- 80 | 11
+ I- 80 | 11
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 2
+ I- 80 Ramp | 3
+ I- 80 Ramp | 3
+ I- 80 Ramp | 3
+ I- 80 Ramp | 3
+ I- 80 Ramp | 3
+ I- 80 Ramp | 3
+ I- 80 Ramp | 3
+ I- 80 Ramp | 3
+ I- 80 Ramp | 3
+ I- 80 Ramp | 4
+ I- 80 Ramp | 4
+ I- 80 Ramp | 4
+ I- 80 Ramp | 4
+ I- 80 Ramp | 5
+ I- 80 Ramp | 5
+ I- 80 Ramp | 5
+ I- 80 Ramp | 5
+ I- 80 Ramp | 5
+ I- 80 Ramp | 5
+ I- 80 Ramp | 5
+ I- 80 Ramp | 7
+ I- 80 Ramp | 7
+ I- 80 Ramp | 7
+ I- 80 Ramp | 7
+ I- 880 | 2
+ I- 880 | 2
+ I- 880 | 2
+ I- 880 | 2
+ I- 880 | 2
+ I- 880 | 5
+ I- 880 | 5
+ I- 880 | 5
+ I- 880 | 5
+ I- 880 | 5
+ I- 880 | 5
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 6
+ I- 880 | 7
+ I- 880 | 7
+ I- 880 | 7
+ I- 880 | 7
+ I- 880 | 7
+ I- 880 | 7
+ I- 880 | 7
+ I- 880 | 9
+ I- 880 | 9
+ I- 880 | 9
+ I- 880 | 9
+ I- 880 | 9
+ I- 880 | 9
+ I- 880 | 9
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 10
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 12
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 13
+ I- 880 | 14
+ I- 880 | 14
+ I- 880 | 14
+ I- 880 | 14
+ I- 880 | 14
+ I- 880 | 14
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 17
+ I- 880 | 19
+ I- 880 | 19
+ I- 880 | 19
+ I- 880 | 19
+ I- 880 | 19
+ I- 880 | 19
+ I- 880 | 19
+ I- 880 | 19
+ I- 880 | 19
+ I- 880 | 19
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 2
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 3
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 4
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 5
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 6
+ I- 880 Ramp | 8
+ I- 880 Ramp | 8
+ I- 880 Ramp | 8
+ I- 980 | 2
+ I- 980 | 2
+ I- 980 | 2
+ I- 980 | 2
+ I- 980 | 2
+ I- 980 | 2
+ I- 980 | 2
+ I- 980 | 2
+ I- 980 | 3
+ I- 980 | 3
+ I- 980 | 3
+ I- 980 | 3
+ I- 980 | 3
+ I- 980 | 3
+ I- 980 | 3
+ I- 980 | 3
+ I- 980 | 3
+ I- 980 | 4
+ I- 980 | 4
+ I- 980 | 5
+ I- 980 | 5
+ I- 980 | 7
+ I- 980 | 7
+ I- 980 | 7
+ I- 980 | 7
+ I- 980 | 12
+ I- 980 Ramp | 3
+ I- 980 Ramp | 3
+ I- 980 Ramp | 3
+ I- 980 Ramp | 7
+(896 rows)
+
+SELECT * FROM toyemp WHERE name = 'sharon';
+ name | age | location | annualsal
+--------+-----+----------+-----------
+ sharon | 25 | (15,12) | 12000
+(1 row)
+
diff --git a/src/test/regress/expected/varchar_1.out b/src/test/regress/expected/varchar_1.out
new file mode 100644
index 00000000000..a24ca342110
--- /dev/null
+++ b/src/test/regress/expected/varchar_1.out
@@ -0,0 +1,111 @@
+--
+-- VARCHAR
+--
+CREATE TABLE VARCHAR_TBL(f1 varchar(1));
+INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
+INSERT INTO VARCHAR_TBL (f1) VALUES ('A');
+-- any of the following three input formats are acceptable
+INSERT INTO VARCHAR_TBL (f1) VALUES ('1');
+INSERT INTO VARCHAR_TBL (f1) VALUES (2);
+INSERT INTO VARCHAR_TBL (f1) VALUES ('3');
+-- zero-length char
+INSERT INTO VARCHAR_TBL (f1) VALUES ('');
+-- try varchar's of greater than 1 length
+INSERT INTO VARCHAR_TBL (f1) VALUES ('cd');
+ERROR: value too long for type character varying(1)
+INSERT INTO VARCHAR_TBL (f1) VALUES ('c ');
+SELECT '' AS seven, VARCHAR_TBL.*;
+ seven | f1
+-------+----
+ | a
+ | A
+ | 1
+ | 2
+ | 3
+ |
+ | c
+(7 rows)
+
+SELECT '' AS six, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 <> 'a';
+ six | f1
+-----+----
+ | A
+ | 1
+ | 2
+ | 3
+ |
+ | c
+(6 rows)
+
+SELECT '' AS one, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 = 'a';
+ one | f1
+-----+----
+ | a
+(1 row)
+
+SELECT '' AS five, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 < 'a';
+ five | f1
+------+----
+ | 1
+ | 2
+ | 3
+ |
+(4 rows)
+
+SELECT '' AS six, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 <= 'a';
+ six | f1
+-----+----
+ | a
+ | 1
+ | 2
+ | 3
+ |
+(5 rows)
+
+SELECT '' AS one, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 > 'a';
+ one | f1
+-----+----
+ | A
+ | c
+(2 rows)
+
+SELECT '' AS two, c.*
+ FROM VARCHAR_TBL c
+ WHERE c.f1 >= 'a';
+ two | f1
+-----+----
+ | a
+ | A
+ | c
+(3 rows)
+
+DROP TABLE VARCHAR_TBL;
+--
+-- Now test longer arrays of char
+--
+CREATE TABLE VARCHAR_TBL(f1 varchar(4));
+INSERT INTO VARCHAR_TBL (f1) VALUES ('a');
+INSERT INTO VARCHAR_TBL (f1) VALUES ('ab');
+INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd');
+INSERT INTO VARCHAR_TBL (f1) VALUES ('abcde');
+ERROR: value too long for type character varying(4)
+INSERT INTO VARCHAR_TBL (f1) VALUES ('abcd ');
+SELECT '' AS four, VARCHAR_TBL.*;
+ four | f1
+------+------
+ | a
+ | ab
+ | abcd
+ | abcd
+(4 rows)
+
diff --git a/src/test/regress/pg_regress.sh b/src/test/regress/pg_regress.sh
index 0c348ddeddc..c2b919fd6d8 100644
--- a/src/test/regress/pg_regress.sh
+++ b/src/test/regress/pg_regress.sh
@@ -1,5 +1,5 @@
#! /bin/sh
-# $Header: /cvsroot/pgsql/src/test/regress/Attic/pg_regress.sh,v 1.24 2002/04/24 01:56:20 momjian Exp $
+# $Header: /cvsroot/pgsql/src/test/regress/Attic/pg_regress.sh,v 1.25 2002/05/14 13:05:43 petere Exp $
me=`basename $0`
: ${TMPDIR=/tmp}
@@ -451,6 +451,16 @@ if [ $? -ne 0 ]; then
(exit 2); exit
fi
+"$bindir/psql" $psql_options -c "\
+alter database \"$dbname\" set lc_messages to 'C';
+alter database \"$dbname\" set lc_monetary to 'C';
+alter database \"$dbname\" set lc_numeric to 'C';
+alter database \"$dbname\" set lc_time to 'C';" "$dbname" 2>/dev/null
+if [ $? -ne 0 ]; then
+ echo "$me: could not set database default locales"
+ (exit 2); exit
+fi
+
# ----------
# Remove regressuser* and regressgroup* user accounts.
@@ -559,22 +569,44 @@ do
# to a system-specific expected file.
# There shouldn't be multiple matches, but take the last if there are.
- EXPECTED="$inputdir/expected/${name}.out"
+ EXPECTED="$inputdir/expected/${name}"
for LINE in $SUBSTLIST
do
if [ `expr "$LINE" : "$name="` -ne 0 ]
then
SUBST=`echo "$LINE" | sed 's/^.*=//'`
- EXPECTED="$inputdir/expected/${SUBST}.out"
+ EXPECTED="$inputdir/expected/${SUBST}"
fi
done
- diff $DIFFFLAGS $EXPECTED $outputdir/results/${name}.out >/dev/null 2>&1
- case $? in
+ # If there are multiple equally valid result file, loop to get the right one.
+ # If none match, diff against the closet one.
+
+ bestfile=
+ bestdiff=
+ result=2
+ for thisfile in $EXPECTED.out ${EXPECTED}_[0-9].out; do
+ [ ! -r "$thisfile" ] && continue
+ diff $DIFFFLAGS $thisfile $outputdir/results/${name}.out >/dev/null 2>&1
+ result=$?
+ case $result in
+ 0) break;;
+ 1) thisdiff=`diff $DIFFFLAGS $thisfile $outputdir/results/${name}.out | wc -l`
+ if [ -z "$bestdiff" ] || [ "$thisdiff" -lt "$bestdiff" ]; then
+ bestdiff=$thisdiff; bestfile=$thisfile
+ fi
+ continue;;
+ 2) break;;
+ esac
+ done
+
+ # Now print the result.
+
+ case $result in
0)
echo "ok";;
1)
- ( diff $DIFFFLAGS -C3 $EXPECTED $outputdir/results/${name}.out
+ ( diff $DIFFFLAGS -C3 $bestfile $outputdir/results/${name}.out
echo
echo "======================================================================"
echo ) >> "$diff_file"