At 06:53 PM 17/05/2006 -0400, Joshua Tauberer wrote: >Nikki Locke wrote: >> What about putting in some type checking when the data is _written_ to the >> database, instead? OK, it wouldn't stop exceptions being thrown if the data >> was written by a some other app, but at least it would make things work >> consistently. > >I don't think there should be a database that can't be read using any >method, even if it wasn't created with Mono.Data.SqliteClient and even >if it has crazy nonuniform data in columns.
What about making SQLite type "safety" an optional feature, configured in the connection string, so that when enabled, the GetSchemaTable method returns the types asreported by SQLite, but by default (with a plain, standard connection string) it returns all columns as 'String'? This is especilaly attractive if there is some way to indicate this in the connection string that other providers (e.g. Finisar) will simply ignore. That way, if you know & trust the database, you can enable the type conversions, but with the knowledge that the database could be "corrupt" w.r.t. the column types, resulting in exceptions that are outside of your control. If you don't trust the database, then you can simply get strings back and go from there :-) A quick glance at Connection.cs in the Finisar source code (http://tinyurl.com/nt4we) and the mono SqliteClient source code (http://tinyurl.com/rrpcb) shows that mono will simply ignore any parameters in the connection string, as long as they're well-formed ("Name=Value"), and while Finisar will complain about any parameter name it doesn't know, it silently allows parameter *values* it doesn't know about. Finisar has a parameter called "Compatibility", so perhaps this could be hijacked for this purpose: string conn_str = "Data Source=dbfile;Version=3;Compatibility=use-field-types"; Of course, Mono.Data.SqliteClient uses "URI" in place of "Data Source", but perhaps "Data Source" could be added to Mono.Data.SqliteClient; then, the above connection string would work just fine in both Finisar.Sqlite and Mono.Data.SqliteClient :-) Note that if a user wants one of the other Finisar "Compatibility" options, they can simply include the "Compatibility" parameter more than once. Another option -- not mutually exclusive -- might be to make any fields of a record which fail to parse into DBNulls. Of course, this could only properly be done on fields not marked as "NOT NULL", but it would be a useful alternative to throwing exceptions... Jonathan Gilbert _______________________________________________ Mono-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-list
