SQL Problem: ERROR: ExecEvalExpr: unknown expression type 108 - Mailing list pgsql-sql

From Michael Klemme
Subject SQL Problem: ERROR: ExecEvalExpr: unknown expression type 108
Date
Msg-id 375E25AE.EEA6FD67@bankakademie.de
Whole thread Raw
Responses Re: [SQL] SQL Problem: ERROR: ExecEvalExpr: unknown expression type 108
List pgsql-sql
Hallo!

I try to create a web server authentification database for our Apache
using PostgreSQL.
Students will be added to certain groups, group entries need to be
invalidated once in a while.



    klemme@moa:~/Postgres/auth> psql -d authentify -f
auth-create-test.sql

    DROP TABLE user;
    DROP
    DROP TABLE ugroup;
    DROP
    -- user entries
    CREATE TABLE user(
    vorname         char(20) NOT NULL,      --Vorname des Benutzers
    name            char(20) NOT NULL,      --Name des Benutzers
    uname        char(10) PRIMARY KEY,  --eindeutiger Benutzername des
Benutzers im Server';
    pass            char(16) NOT NULL,      --Paßwort des Benutzers
    changed         date NOT NULL
    );
    NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit index
user_pkey for table userCREATE

    -- group entries
    CREATE TABLE ugroup
    (
    uname           char(10) NOT NULL,      --Zeiger auf user
    ugroup          char(10) NOT NULL,      --Name der Gruppe
    expires         date NOT NULL,          --Verfallsdatum
    changed         date NOT NULL);
    CREATE

    CREATE UNIQUE INDEX ugroup_idx ON ugroup (uname,ugroup);
    CREATE

    vacuum;
    VACUUM

    --- Test entries

    insert into user values ('Michael', 'Klemme', 'mklemme', 'xxxx',
'04-06-1999');
    INSERT 24895 1
    insert into user values ('Michaela','Klemme','maklemme', 'xxxx',
'04-06-1999');
    INSERT 24896 1

    insert into ugroup values ('mklemme', 'Physics', '31-12-1999',
'04-06-1999');
    INSERT 24897 1
    insert into ugroup values ('mklemme', 'Math', '31-12-1999',
'04-06-1999');
    INSERT 24898 1
    insert into ugroup values ('maklemme', 'Math', '31-12-1998',
'04-06-1999');
    INSERT 24899 1


    --I need to create a view for the Apache module that only returns
user
    --entries if a non-expired group entry exists.
    --The SELECT Statement below works okay.

    SELECT uname, pass FROM user
    WHERE UNAME IN
    (SELECT uname FROM ugroup WHERE expires >=  datetime_date('now'));
    uname     |pass
    ----------+----------------
    mklemme   |xxxx
    (1 row)


    --However, if I use the same statment in a view, I get this error
message

    -- view to be accessed by Apache
    DROP VIEW legal_user;
    DROP
    CREATE VIEW legal_user AS
    SELECT uname, pass FROM user
    WHERE UNAME IN
    (SELECT uname FROM ugroup WHERE expires >=  datetime_date('now'));
    CREATE

    SELECT * FROM legal_user;
    ERROR:  ExecEvalExpr: unknown expression type 108
    EOF

ANy help would be greatly appreciated!

Thanks,
Grüße
        Michael
--
Michael Klemme
@home            mklemme@gmx.de /
                 klemme@bankakademie.de / klemme@acm.org
                 PGP: http://www.hmu.auckland.ac.nz/~michael-k/pgp
DROP TABLE user;
DROP TABLE ugroup;

-- user entries
CREATE TABLE user
(
vorname        char(20) NOT NULL,    --Vorname des Benutzers
name         char(20) NOT NULL,    --Name des Benutzers
uname        char(10) PRIMARY KEY,
            --eindeutiger Benutzername des Benutzers im Server';
pass         char(16) NOT NULL,    --Pa�wort des Benutzers
changed        date NOT NULL
);


-- group entries
CREATE TABLE ugroup
(
uname        char(10) NOT NULL,    --Zeiger auf user
ugroup        char(10) NOT NULL,    --Name der Gruppe
expires        date NOT NULL,        --Verfallsdatum
changed        date NOT NULL
);

CREATE UNIQUE INDEX ugroup_idx ON ugroup (uname,ugroup);

vacuum;

--- Test entries

insert into user values ('Michael', 'Klemme', 'mklemme', 'xxxx', '04-06-1999');
insert into user values ('Michaela','Klemme','maklemme', 'xxxx', '04-06-1999');

insert into ugroup values ('mklemme', 'Physics', '31-12-1999',  '04-06-1999');
insert into ugroup values ('mklemme', 'Math', '31-12-1999',  '04-06-1999');
insert into ugroup values ('maklemme', 'Math', '31-12-1998', '04-06-1999');


--I need to create a view for the Apache module that only returns user
--entries if a non-expired group entry exists.
--The SELECT Statement below works okay.


SELECT uname, pass FROM user
     WHERE UNAME IN
       (SELECT uname FROM ugroup WHERE expires >=  datetime_date('now'));



--However, if I use the same statment in a view, I get this error message

-- view to be accessed by Apache
DROP VIEW legal_user;
CREATE VIEW legal_user AS
   SELECT uname, pass FROM user
     WHERE UNAME IN
       (SELECT uname FROM ugroup WHERE expires >=  datetime_date('now'));

SELECT * FROM legal_user;


pgsql-sql by date:

Previous
From: "Hub.Org News Admin"
Date:
Subject: ...
Next
From: Michal Samek
Date:
Subject: Select like when searching for whole word and optimizing it