testwherenull.lpr 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. program testWhereNULL;
  2. {$mode objfpc}{$H+}
  3. uses
  4. {$IFDEF UNIX}{$IFDEF UseCThreads}
  5. cthreads,
  6. {$ENDIF}{$ENDIF}
  7. Classes, SysUtils,
  8. db, sqldb, sqlite3conn, variants;
  9. var
  10. Conn: TSQLite3Connection;
  11. Tran: TSQLTransaction;
  12. Q: TSQLQuery;
  13. sql: string;
  14. i: integer;
  15. begin
  16. Conn:=TSQLite3Connection.Create(nil);
  17. Conn.DatabaseName:='test.db';
  18. Tran:=TSQLTransaction.Create(nil);
  19. Tran.DataBase:=Conn;
  20. Q:=TSQLQuery.Create(nil);
  21. Q.DataBase:=Conn;
  22. Conn.Open;
  23. writeln('Connected');
  24. Conn.ExecuteDirect('CREATE TEMPORARY TABLE t (int_field INT, string_field VARCHAR(30))');
  25. writeln('Temporary table created');
  26. Q.SQL.Text:='SELECT * FROM t';
  27. Q.UpdateMode:=upWhereAll; // <-- UpdateMode is upWhereAll or upWhereCahnged
  28. Q.Open;
  29. Q.AppendRecord([NULL,'a']);
  30. Q.AppendRecord([2,'c']);
  31. Q.ApplyUpdates;
  32. Q.Close;
  33. writeln('1. Bug: second row has instead of 2 in first column NULL');
  34. Q.Open;
  35. Q.Next;
  36. writeln('Value of ', Q.Fields[0].FieldName,' is: ', Q.Fields[0].AsString, ' expected: 2');
  37. Q.Close;
  38. writeln;
  39. writeln('2. Case update of record, where some value is null (upWhereAll or upWhereChanged)');
  40. Q.Open;
  41. Q.Edit;
  42. Q.Fields[1].AsString:='b';
  43. Q.Post;
  44. Q.ApplyUpdates;
  45. Q.Close;
  46. Q.Open;
  47. writeln('Value of ', Q.Fields[1].FieldName,' is: ', Q.Fields[1].AsString,' expected: b');
  48. Q.Close;
  49. writeln;
  50. writeln('3. Case delete of record, where some value is null (upWhereAll or upWhereChanged)');
  51. Q.Open;
  52. Q.Delete;
  53. Q.ApplyUpdates;
  54. Q.Close;
  55. Q.Open;
  56. writeln('Number of rows: ', Q.RecordCount, ' expected: 1');
  57. Q.Close;
  58. //END
  59. Tran.Commit;
  60. Conn.Close;
  61. Q.Free;
  62. Tran.Free;
  63. Conn.Free;
  64. writeln('End. Press any key');
  65. readln;
  66. end.