Subject | TIB_Cursor.RequestLive forces Explicit Record Lock on FB1.5 (RC1)? |
---|---|
Author | Hugo |
Post date | 2003-04-16T06:44:57Z |
(IBO 4.2.Hi)
I don't know if this is a IBO-related issue, but I expose here to find out:
I have a simple project with:
- one TIB_Connection, IB_Connection1
- one TIB_Cursor, IB_Cursor1, linked to IB_Connection1
- one TIB_DSQL, IB_DSQL1, linked to IB_Connection1
- no TIB_Transactions are present
Metadata:
CREATE TABLE MYTABLE (
MY_PK CHAR(2) NOT NULL PRIMARY KEY,
MACHINE SMALLINT);
The only record on table:
INSERT INTO MYTABLE VALUES('AA', 1);
IB_Cursor1.SQL :
SELECT MY_PK
, MACHINE
FROM MYTABLE
WHERE MY_PK='AA';
IB_Cursor1.RequestLive := true (because maybe I'd need delete or insert
record)
IB_DSQL1.SQL :
DELETE
FROM MYTABLE
WHERE MACHINE=1;
The sequence I make:
IB_Connection1.Connect;
IB_Cursor1.Prepare;
IB_Cursor1.First; /* now it's pointing to the only record 'AA',1 */
IB_Cursor1.Close;
IB_DSQL1.Prepare;
IB_DSQL1.Execute; /* raises an exception 'lock conflict on no wait
transaction' 'deadlock' 'update conflicts with concurrent update' */
The same sample on Firebird 1.0 doesn't raise the 'deadlock' exception.
The same sample on FB 1.5 (RC1) with IB_Cursor1.RequestLive := false doesn't
raise the 'deadlock' exception.
It's to say, it seems like the 'FOR UPDATE' clause on TIB_Cursor
(RequestLive:=true) includes also the explicit record lock feature added by
Nickolay Samofatov to FB1.5 . But this feature, based on posts I read on
Firebird-devel list, requires the syntax 'FOR UPDATE WITH LOCK' . So,
initially I put my suspicion on IBO parser; after I search full text on IBO
sources, I don't find the string 'WITH LOCK' nowhere... Moreover, this
feature (explicit record lock) it's not related to FB config file
(firebird.conf) , and it's not the default behaviour for the engine.
I know FB1.5 RC1 it's not a official release; but I have this
"error/trouble"since FB1.5Alpha5 and I've waited until Release Candidate,
more definitive.
I just want to know if I can discard it as an IBO problem, and expose it to
firebird-devel list.
Many thanks in advance,
Hugo.
I don't know if this is a IBO-related issue, but I expose here to find out:
I have a simple project with:
- one TIB_Connection, IB_Connection1
- one TIB_Cursor, IB_Cursor1, linked to IB_Connection1
- one TIB_DSQL, IB_DSQL1, linked to IB_Connection1
- no TIB_Transactions are present
Metadata:
CREATE TABLE MYTABLE (
MY_PK CHAR(2) NOT NULL PRIMARY KEY,
MACHINE SMALLINT);
The only record on table:
INSERT INTO MYTABLE VALUES('AA', 1);
IB_Cursor1.SQL :
SELECT MY_PK
, MACHINE
FROM MYTABLE
WHERE MY_PK='AA';
IB_Cursor1.RequestLive := true (because maybe I'd need delete or insert
record)
IB_DSQL1.SQL :
DELETE
FROM MYTABLE
WHERE MACHINE=1;
The sequence I make:
IB_Connection1.Connect;
IB_Cursor1.Prepare;
IB_Cursor1.First; /* now it's pointing to the only record 'AA',1 */
IB_Cursor1.Close;
IB_DSQL1.Prepare;
IB_DSQL1.Execute; /* raises an exception 'lock conflict on no wait
transaction' 'deadlock' 'update conflicts with concurrent update' */
The same sample on Firebird 1.0 doesn't raise the 'deadlock' exception.
The same sample on FB 1.5 (RC1) with IB_Cursor1.RequestLive := false doesn't
raise the 'deadlock' exception.
It's to say, it seems like the 'FOR UPDATE' clause on TIB_Cursor
(RequestLive:=true) includes also the explicit record lock feature added by
Nickolay Samofatov to FB1.5 . But this feature, based on posts I read on
Firebird-devel list, requires the syntax 'FOR UPDATE WITH LOCK' . So,
initially I put my suspicion on IBO parser; after I search full text on IBO
sources, I don't find the string 'WITH LOCK' nowhere... Moreover, this
feature (explicit record lock) it's not related to FB config file
(firebird.conf) , and it's not the default behaviour for the engine.
I know FB1.5 RC1 it's not a official release; but I have this
"error/trouble"since FB1.5Alpha5 and I've waited until Release Candidate,
more definitive.
I just want to know if I can discard it as an IBO problem, and expose it to
firebird-devel list.
Many thanks in advance,
Hugo.