[Gambas-user] isNull()
Bruce Bruen
bbruen at ...2308...
Thu Nov 25 10:13:54 CET 2010
On Thu, 25 Nov 2010 10:01:42 am Benoît Minisini wrote:
> > I use IsNull extensively, is that going to be removed?
> >
> > richard
>
> No. I use it extensively too.
>
> Here is the result of my thought:
>
> - You can know the datatype of a variant with the TypeOf() function. You
> don't have to use the current IsXXXX() functions.
>
> - But you often need to know if a string can be converted to a number, an
> integer, a float, a date.
>
> - You normally want to know that for localized strings get from the outside
> (i.e. the user). For non-localized strings, they are intern to your
> program, so you should know what you are doing.
>
> So:
>
> IsNull(x) -> kept its behaviour.
> IsInteger(x) -> If Val(x) returns an integer
> IsFloat(x) -> If Val(x) returns a float
> IsDate(x) -> If Val(x) returns a date
>
> They should be enough. But I could add:
>
> IsLong(x) -> If Val(x) returns a Long
> IsSingle(x) -> If Single(x) returns a Single.
>
> Regards,
Benoît,
I would like to see the generic IsNumber retained. When dealing with external
data sources, i.e. data from an external system source not "a user" the
content of data fields in a database can vary widely over time. In different
eras, a particular column may have it's type changed in the source database
system but the existent data remains undisturbed.
Although it sounds weird, we often see data columns on mainframe and even on
some PC based rdbms that have gone from a text (or char or varchar) to a
numeric type, to a different numeric type and so forth. In these database
systems, any new inserts or updates will conform to the current type
definition. However, existing data is left as is.
So if "booktype" was originally char(1), then became charvar then became a
specific structured datatype (for example, some of the custom types provided
for in postgresql), we still see instances of, say "A" being returned by the
dbms for booktype. (The way we handle this is by way of our own postgresql
"front end" database that accesses the remote dbms and returns text fields for
any and all columns that contain suspect data types.)
In the main, I don't care if the field contains an integer or a float (or a
long or single etc) just that it contains a number and not any non-numeric
data. I will worry about the representation after I have determined that it
is a number.
I realise that this is a fairly arcane use of gambas, but the speed that we
can develop (and run) filters based on this approach is why I chose gambas in
the first place. As I said, we use a 80-20 rule to get to the core issue of
the data as soon as possible. The parsing filters get more and more complex
for each 20% left over. So the ability to recognise "generic" datatypes in
string values, "is it a number, good, then return true else start looking for
other clues as to what it is supposed to represent ... does it look like it
might be a date? If so then try to decipher the date structure, else does it
look like a "known" construct (i.e IF wkstr LIKE "*(*%)*" then ...) etc etc.
Oh, and by the way, I too use IsNull extensively, specifically to provide
"lazy loads" of subordinate persisted objects, usually collections, whose
content is not required unless specifically accessed. For example, a "Book"
object may have a property which is an "Author" object. When the persisted
book object is loaded from the database, the author object is not loaded until
the program actually accesses the book.author property, viz
PRIVATE FUNCTION MyAuthor() as Author
if IsNull($myAuthor)
$myAuthor=NEW Author
$myAuthor.LoadDB(ME.AuthorName)
endif
RETURN $myAuthor
END
(obviously simplified to exclude error checking).
--
best regards
Bruce Bruen
More information about the User
mailing list