Hi,
given this legacy informix table:
~~~~~~~~~~~~~~~~~~~~~~~
create table kperson
(
name varchar(80, 1) not NULL,
age integer not NULL,
primary key (name)
);
I did:
~~~~
>>> db.define_table("kperson",
... Field("name"),
... Field("age"),
... primarykey=["name"],
... migrate=False
... )
Inserting one row:
~~~~~~~~~~~~~
>>> db.kperson.insert(name="Oli1", age=23)
{'name': 'Oli1'}
Ok!
inserting another row:
~~~~~~~~~~~~~~~~
>>> db.kperson.insert(name="Oli2", age=23)
{'name': 'Oli2'}
Ok!
trying to update the first row:
~~~~~~~~~~~~~~~~~~~~~
>>> db(
db.kperson.name=="Oli1").update(name="Oli2")
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/root/web2py-1439/gluon/sql.py", line 3091, in update
self._db._execute(query)
File "/root/web2py-1439/gluon/sql.py", line 1086, in <lambda>
self._execute = lambda a: self._cursor.execute(a[:-1])
IntegrityError: SQLCODE -268 in EXECUTE:
23000: Integrity constraint violation
IX000: ISAM error: duplicate value for a record with unique key.
Ok, this IntegrityError was expected, because we tried to update name
to a value that already existed in the table.
But trying to insert a row with an already existing name:
>>> db.kperson.insert(name="Oli2", age=23)
does not give an error message at all - although the same constraint
violation occurs!?
Why is there no IntegrityError exception raised in this case? Same
strange behavior with appadmin: you can 'insert' new rows with
appadmin that violate constraints and therefore are not really
inserted into the table without even getting an error message. I don't
think that this behavior is consistent.
Regards
Hans