SQLite

View Ticket
Login
Ticket Hash: 25ee81271091ec27a8c5e00eeffc02949a712cb7
Title: PRAGMA case_sensitive_like=1 fails
Status: Closed Type: Code_Defect
Severity: Important Priority: Immediate
Subsystem: Unknown Resolution: Fixed
Last Modified: 2011-09-19 17:37:21
Version Found In: 3.7.7
Description:
The following test program reports that the PRAGMA fails:

<blockquote><verbatim>
#include <stdio.h>
#include "sqlite3.h"

int main(void){
  sqlite3 *db3;
  char *errmsg;
  int err;

  sqlite3_open("test.db", &db3);
  err = sqlite3_exec(db3, "PRAGMA case_sensitive_like=1;", 0, 0, &errmsg);
  if (err != SQLITE_OK){
    printf("Error %d: %s\n", err, errmsg);
    sqlite3_free(errmsg);
  }
  return 0;
}
</verbatim></blockquote>

This problem was reported on the mailing list by Greg Stein.  Investigation
shows that the PRAGMA actually works; it simply returns an SQLITE_SCHEMA
error code instead of SQLITE_OK.  The problem was introduced by
check-in [957b2ab67c61] by the removal of "p->expired = 0;" from 
the sqlite3VdbeAddOp3().  The case_sensitive_like function causes
a new LIKE function to be registered, which sets "p->expired = 1",
leading to the error.  It is unclear (yet) why this problem was not
picked up by tests.