Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^5: Distiguishing arguments: number-strings vs real integer

by syphilis (Bishop)
on Aug 10, 2018 at 14:46 UTC ( #1220199=note: print w/replies, xml ) Need Help??


in reply to Re^4: Distiguishing arguments: number-strings vs real integer
in thread Distiguishing arguments: number-strings vs real integer

This is up to the user of the layer, that's why I need to know if he passed a literal string or number. And to be able to warn him if necessary.

Ok ... so you firstly need to know which option the user has chosen.
Having determined that, I would have thought you could just pass on that user-supplied argument as "$x" (if string was chosen) or "$x"+0 (if integer was chosen) without any need to analyse just what that argument was.

But I've never worked with databases so you should probably simply ignore me (and perhaps even be envious ;-)

Cheers,
Rob
  • Comment on Re^5: Distiguishing arguments: number-strings vs real integer

Replies are listed 'Best First'.
Re^6: Distiguishing arguments: number-strings vs real integer (DSL concept)
by LanX (Archbishop) on Aug 10, 2018 at 15:15 UTC
    In the case of (auto generated) placeholders I will pass a reference to the original value into DBI->bind_param() , so this will be fine.

    It's the case of literals causing me headaches.

    The raw concept in short:

    • the DB-table is handled as a Perl package with it's proper namespace,
    • the columns are constants in this package returning objects blessed into a class SQL::Column
    • operators are overloaded for SQL::Column
    • operations return objects of class SQL::Operation with nested attributes like {operator => "<", left =>  bless (['col'], '::Column'), right=> bless (["42"], '::Literal')
    • higher syntax expressions like WHERE are just functions imported into that table package, dealing with the nested objects and returning another container object
    • In the end I get an abstract syntax tree of nested objects which I can walk and translate to the target SQL dialect
    So something like this
    query { package t_table; WHERE col < "42" }

    needs to distinguish if the literal was string "42" or 42

    Of course I could think about overloading lt too, to have a more Perlish way to get the type (and crosscheck against the table's definition), but the more information I have to catch errors, the better.

    I hope my approach is clearer now! :)

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1220199]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (9)
As of 2020-04-08 19:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    The most amusing oxymoron is:
















    Results (45 votes). Check out past polls.

    Notices?