Hi

appended below is a simple database schema (which may not
be a candidate for the next Nobel Prize for SQL Database
Design, but represents enough of a production
database to demonstrate the following problem).

And that is:

under 7.3 this statement:
     SELECT foo_id, thingy_name, bar_name
       FROM foo_view, bar
      WHERE bar_id=foo_bar_id

produces the desired results.

This however:
     SELECT foo_id, thingy_name, bar_name
       FROM foo_view
 INNER JOIN bar ON bar_id=foo_bar_id

produces

 ERROR:  ExecEvalExpr: unknown expression type 108

The latter statement does however work in 7.1.3 with no
apparent problems.

Question: what does "unknown expression type 108" mean and
why should it suddenly occur in 7.3? A bit of Googling
reveals the same message occurs when using subselects
in constraints, but that doesn't seem related to this case.


Ian Barwick
[EMAIL PROTECTED]


-- sample DB for "unknown expression type 108" error

CREATE TABLE a_thingy (
  a_id INT,
  a_firstname VARCHAR(64),
  a_lastname VARCHAR(64),
  PRIMARY KEY (a_id)
);

CREATE TABLE b_thingy (
  b_id INT,
  b_name VARCHAR(64),
  PRIMARY KEY (b_id)
);

CREATE TABLE bar (
  bar_id INT,
  bar_name varchar(64),
  PRIMARY KEY (bar_id)
);

CREATE TABLE foo (
  foo_id INT,
  foo_a_id INT REFERENCES a_thingy NULL, 
  foo_b_id INT REFERENCES b_thingy NULL,
  foo_bar_id INT REFERENCES bar NOT NULL,
  PRIMARY KEY (foo_id),
  CHECK((foo_a_id IS NOT NULL AND foo_b_id IS NULL) OR
        (foo_b_id IS NOT NULL AND foo_a_id IS NULL))
);

CREATE VIEW foo_view AS
  SELECT *,
         CASE
           WHEN foo_a_id IS NOT NULL THEN 
              (SELECT a_lastname || ', ' || a_firstname
                 FROM a_thingy
                WHERE a_id=foo_a_id
              )
           WHEN foo_b_id IS NOT NULL THEN 
              (SELECT b_name
                 FROM b_thingy
                WHERE b_id=foo_b_id
              )
         END 
           AS thingy_name
    FROM foo;

INSERT INTO a_thingy VALUES
 (1, 'John', 'Doe');

INSERT INTO b_thingy VALUES
 (1, 'Megacorp');

INSERT INTO bar VALUES(1, 'squid');
INSERT INTO bar VALUES(2, 'octopus');

INSERT INTO foo VALUES (1,1,NULL,1);
INSERT INTO foo VALUES (2,NULL,1,2);

-- END


---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to