Opened 8 years ago
Closed 8 years ago
Last modified 7 years ago
#13056 closed Bug Report - General (fixed)
database error in AddRecordSchedule returns 'ok'
Reported by: | Owned by: | Bill Meek | |
---|---|---|---|
Priority: | minor | Milestone: | 29.0 |
Component: | MythTV - Services API - Backend | Version: | 0.28.1 |
Severity: | medium | Keywords: | |
Cc: | Ticket locked: | no |
Description
A POST to AddRecordSchedule? with null StartTime? causes a database error but returns 'ok' to poster:
snip from post:
&StartTime=&EndTime=&
snip from log:
#012Driver error was [2/1048]:#012QMYSQL3: Unable to execute statement#012Database error was:#012Column 'starttime' cannot be null Jun 14 23:12:25 vcr2 mythbackend: mythbackend[1185]: I HttpServer51 httprequest.cpp:368 (SendResponse) HTTPRequest::SendResponse(xml/html) () :200 OK -> 127.0.0.1: 8
Attachments (2)
Change History (15)
Changed 8 years ago by
Attachment: | sample.log added |
---|
comment:1 Changed 8 years ago by
Status: | new → infoneeded_new |
---|
comment:2 follow-up: 5 Changed 8 years ago by
For search rules , eg PowerSearch?, RecordingRule::IsValid? doesn't validate the times (because they're N/A) but the Save still tries to write them to the Db.
comment:3 Changed 8 years ago by
Roger, I see it, thanks.
Jeff, in addition to the log requested above, please add the actual response from the backend (not just the 200/OK.)
When I tested as a Title Search, I see the DB Error, but the response is -1 (or actually: {"uint": "4294967295"}.)
comment:4 Changed 8 years ago by
I've attached the section of the log showing the complete transaction.
comment:5 Changed 8 years ago by
Replying to rsiddons:
For search rules , eg PowerSearch?, RecordingRule::IsValid? doesn't validate the times (because they're N/A) but the Save still tries to write them to the Db.
The schema should probably allow NULLs is such cases. That's something we generally haven't done, though. I also wonder how far such a change would ripple.
comment:6 Changed 8 years ago by
Status: | infoneeded_new → assigned |
---|
Just looking at rules created from the frontend (e.g. Power Search, Record One) and they include a valid start/end/chanid/station in the DB.
Would removing the !isSearch test here: https://code.mythtv.org/cgit/mythtv/tree/mythtv/libs/libmythtv/recordingrule.cpp#n940 be valid?
comment:7 follow-up: 8 Changed 8 years ago by
I assume you mean leaving the start/end, duration, chanid and station checks, then? I'd prefer trying the allow NULL solution first before requiring the user to provide valid values to irrelevant columns.
comment:8 Changed 8 years ago by
Replying to gigem:
I assume you mean leaving the start/end, duration, chanid and station checks, then? I'd prefer trying the allow NULL solution first before requiring the user to provide valid values to irrelevant columns.
Yes, I meant leaving the tests, making them always required.
If I allow NULLs, then wouldn't that be a "master only" solution because it would be a schema change?
ALTER TABLE record MODIFY COLUMN startdate DATE DEFAULT NULL ALTER TABLE record MODIFY COLUMN enddate DATE DEFAULT NULL ALTER TABLE record MODIFY COLUMN starttime TIME DEFAULT NULL ALTER TABLE record MODIFY COLUMN endtime TIME DEFAULT NULL
And, did you want to convert all k(OneRecord,AllRecord,DailyRecord, WeeklyRecord) existing entries to NULL for the 4 columns above?
UPDATE record SET starttime=NULL, endtime=NULL WHERE search IN (2, 4, 5, 6) UPDATE record SET startdate=NULL, enddate=NULL WHERE searchtype IN (2, 4, 5, 6)
comment:9 Changed 8 years ago by
The conversion of old rules probably isn't necessary. I don't think it would hurt anything, but I don't think it would help anything either.
comment:10 Changed 8 years ago by
Milestone: | unknown → 29.0 |
---|
comment:11 Changed 8 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:12 Changed 8 years ago by
I agree that allowing NULLS in these fields is a good thing and will prevent this error, but I think there is still a bug. A database error is not being returned to the initiator. This fix prevents a particular database error, but there might be others in the future.
comment:13 Changed 7 years ago by
Owner: | changed from Bill Meek to Bill Meek |
---|
Please do: mythbackend --setverbose http and then attach the output from the POST. It should look similar to the 1st attachment. Should be easy to test (for me) but I'm getting a 500 error and proper logging of the empty times. The tests in libs/libmythtv/recordingrule.cpp haven't been touched since 2013.