Bug #4999 Update on VIEW fails with prepared statement
Submitted: 11 Aug 2004 19:10 Modified: 16 Aug 2004 20:03
Reporter: Georg Richter Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server Severity:S1 (Critical)
Version:5.0.2 OS:Linux (Linux)
Assigned to: Oleksandr Byelkin CPU Architecture:Any

[11 Aug 2004 19:10] Georg Richter
Description:
prepared statement with update on a view doesn't work (but plain query works).

Output from mysql-test-run ps_view_0001.test:

At line 89: query 'EXECUTE stmt USING @v0, @v1, @v2, @v3, @v4, @v5, @v6, @v7, @v8, @v9, @v10, @v11, @v12, @v13, @v14, @v15, @v16, @v17, @v18, @v19 ' failed: 1347: Column 'SQLX' is not updatable

How to repeat:
###################### ps_view_001.test ######################
#                                                            #
#  test for updatable view                                   #
#                                                            #
##############################################################

USE test;

--disable_warnings
drop table if exists REPOSRC;
drop view if exists PROGDIR;
--enable_warnings

let $type= 'InnoDB' ;

# create table REPOSRC
eval create table REPOSRC (
  PROGNAME varchar(40) character set latin1 collate latin1_bin NOT NULL default '',
  R3STATE char(1) character set latin1 collate latin1_bin NOT NULL default '',
  SQLX char(1) character set latin1 collate latin1_bin NOT NULL default '',
  EDTX char(1) character set latin1 collate latin1_bin NOT NULL default '',
  DBNA char(2) character set latin1 collate latin1_bin NOT NULL default '',
  CLAS varchar(4) character set latin1 collate latin1_bin NOT NULL default '',
  TYPE char(3) character set latin1 collate latin1_bin NOT NULL default '',
  OCCURS char(1) character set latin1 collate latin1_bin NOT NULL default '',
  SUBC char(1) character set latin1 collate latin1_bin NOT NULL default '',
  APPL char(1) character set latin1 collate latin1_bin NOT NULL default '',
  SECU varchar(8) character set latin1 collate latin1_bin NOT NULL default '',
  CNAM varchar(12) character set latin1 collate latin1_bin NOT NULL default '',
  CDAT varchar(8) character set latin1 collate latin1_bin NOT NULL default '00000000',
  VERN varchar(6) character set latin1 collate latin1_bin NOT NULL default '',
  LEVL varchar(4) character set latin1 collate latin1_bin NOT NULL default '',
  RSTAT char(1) character set latin1 collate latin1_bin NOT NULL default '',
  RMAND char(3) character set latin1 collate latin1_bin NOT NULL default '',
  RLOAD char(1) character set latin1 collate latin1_bin NOT NULL default '',
  UNAM varchar(12) character set latin1 collate latin1_bin NOT NULL default '',
  UDAT varchar(8) character set latin1 collate latin1_bin NOT NULL default '00000000',
  UTIME varchar(6) character set latin1 collate latin1_bin NOT NULL default '000000',
  DATALG int(11) NOT NULL default '0',
  VARCL char(1) character set latin1 collate latin1_bin NOT NULL default '',
  DBAPL char(1) character set latin1 collate latin1_bin NOT NULL default '',
  FIXPT char(1) character set latin1 collate latin1_bin NOT NULL default '',
  SSET char(1) character set latin1 collate latin1_bin NOT NULL default '',
  SDATE varchar(8) character set latin1 collate latin1_bin NOT NULL default '00000000',
  STIME varchar(6) character set latin1 collate latin1_bin NOT NULL default '',
  IDATE varchar(8) character set latin1 collate latin1_bin NOT NULL default '00000000',
  ITIME varchar(6) character set latin1 collate latin1_bin NOT NULL default '',
  LDBNAME varchar(20) character set latin1 collate latin1_bin NOT NULL default '',
  UCCHECK char(1) character set latin1 collate latin1_bin NOT NULL default '',
  MAXLINELN smallint(6) NOT NULL default '0',
  DATA longblob,
  PRIMARY KEY  (PROGNAME,R3STATE)
) engine = $type ;

#create view PROGDIR
CREATE VIEW .PROGDIR AS select sql_no_cache .T0001.PROGNAME AS `NAME`,.T0001.R3STATE AS `STATE`,.T0001.SQLX AS `SQLX`,.T0001.EDTX AS `EDTX`,.T0001.VARCL AS `VARCL`,.T0001.DBAPL AS `DBAPL`,.T0001.DBNA AS `DBNA`,.T0001.CLAS AS `CLAS`,.T0001.TYPE AS `TYPE`,.T0001.OCCURS AS `OCCURS`,.T0001.SUBC AS `SUBC`,.T0001.APPL AS `APPL`,.T0001.SECU AS `SECU`,.T0001.CNAM AS `CNAM`,.T0001.CDAT AS `CDAT`,.T0001.UNAM AS `UNAM`,.T0001.UDAT AS `UDAT`,.T0001.VERN AS `VERN`,.T0001.LEVL AS `LEVL`,.T0001.RSTAT AS `RSTAT`,.T0001.RMAND AS `RMAND`,.T0001.RLOAD AS `RLOAD`,.T0001.FIXPT AS `FIXPT`,.T0001.SSET AS `SSET`,.T0001.SDATE AS `SDATE`,.T0001.STIME AS `STIME`,.T0001.IDATE AS `IDATE`,.T0001.ITIME AS `ITIME`,.T0001.LDBNAME AS `LDBNAME`,.T0001.UCCHECK AS `UCCHECK` from .REPOSRC T0001 where ((.T0001.R3STATE = _latin1'A') or (.T0001.R3STATE = _latin1'I'));

# SET VARIABLES
SET @v0 = '';
SET @v1 = '';
SET @v2 = 'X';
SET @v3 = 'S';
SET @v4 = 'D$';
SET @v5 = '';
SET @v6 = '';
SET @v7 = '';
SET @v8 = '1';
SET @v9 = 'S';
SET @v10 = '';
SET @v11 = '';
SET @v12 = '000';
SET @v13 = '';
SET @v14 = 'X';
SET @v15 = '';
SET @v16 = 'D$S';
SET @v17 = 'X';
SET @v18 = 'SDB1FMYS';
SET @v19 = 'A';

# please note, that the query works fine
UPDATE `PROGDIR` SET `SQLX` = @v0 ,`EDTX` = @v1 ,`VARCL` = @v2 ,`DBAPL` = @v3 ,`DBNA` = @v4 ,`CLAS` = @v5 ,  `TYPE` = @v6 ,`OCCURS` = @v7 ,`SUBC` = @v8 ,`APPL` = @v9 ,`SECU` = @v10 ,`RSTAT` = @v11 , `RMAND` = @v12 ,`RLOAD` = @v13 ,`FIXPT` = @v14 ,`SSET` = @v15 ,`LDBNAME` = @v16 ,`UCCHECK` = @v17 WHERE `NAME` = @v18 AND `STATE` = @v19 ;

#  PREPARE stmt_name
PREPARE stmt FROM 'UPDATE `PROGDIR` SET `SQLX` = ? ,`EDTX` = ? ,`VARCL` = ? ,`DBAPL` = ? ,`DBNA` = ? ,`CLAS` = ? ,  `TYPE` = ? ,`OCCURS` = ? ,`SUBC` = ? ,`APPL` = ? ,`SECU` = ? ,`RSTAT` = ? , `RMAND` = ? ,`RLOAD` = ? ,`FIXPT` = ? ,`SSET` = ? ,`LDBNAME` = ? ,`UCCHECK` = ? WHERE `NAME` = ? AND `STATE` = ? ' ;

#  EXECUTE stmt_name
EXECUTE stmt USING @v0, @v1, @v2, @v3, @v4, @v5, @v6, @v7, @v8, @v9, @v10, @v11, @v12, @v13, @v14, @v15, @v16, @v17, @v18, @v19 ;

# 3. DEALLOCATE PREPARE stmt_name;
DEALLOCATE PREPARE stmt ;
[16 Aug 2004 19:16] Oleksandr Byelkin
ChangeSet 
  1.1723 04/08/16 23:15:31 bell@sanja.is.com.ua +3 -0 
  resolve UPDATE fields belonged to VIEWs as Item_field (instead of Item_ref) in prepared 
statements, too (BUG#4999)
[16 Aug 2004 20:03] Oleksandr Byelkin
Thank you for bugreport! patch is pushed in source repository.