Back in C++/C#/Java world a good solution is the RAII pattern - combining validation/conversion with object construction; although it would be nicer if it can be written declaratively, something akin to XML Schema types. <br>
<br>For me - type declarations should help one separate validation/cast/error routines from the main responsibility of the procedures, and if compiler can then take advantage of the info to perform optimizations, all the better. 
<br><br>yinso <br><br><div><span class="gmail_quote">On 5/31/07, <b class="gmail_sendername">Robby Findler</b> &lt;<a href="mailto:robby@cs.uchicago.edu">robby@cs.uchicago.edu</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
There is a standard technique the MLers use for this; they encapsulate<br>the SQL command in an abstract type and only allow operations that<br>make sense for constructing the values. Of course, if you are getting<br>the SQL from a web page, you have to still be a little bit careful on
<br>how you call the parser, but probably you can some leverage out of the<br>data abstraction.<br><br>Robby<br><br>On 5/31/07, Noel Welsh &lt;<a href="mailto:noelwelsh@gmail.com">noelwelsh@gmail.com</a>&gt; wrote:<br>&gt; On 5/31/07, Richard Cobbe &lt;
<a href="mailto:cobbe@ccs.neu.edu">cobbe@ccs.neu.edu</a>&gt; wrote:<br>&gt; &gt; Are there static type systems that can protect against, e.g., SQL<br>&gt; &gt; injection?<br>&gt;<br>&gt; Not that I know of.&nbsp;&nbsp;However you could define your SQL library using,
<br>&gt; say, a &#39;validated&#39; type instead of strings and then your type system<br>&gt; will prevent you from using string that haven&#39;t been validated.&nbsp;&nbsp;Of<br>&gt; course you can do this with dynamic checks as well, with the usual
<br>&gt; tradeoffs.<br>&gt;<br>&gt; Joel on Software has a post justifying the use of Hungarian notation<br>&gt; to implementation a poor man&#39;s type system for a similar use.<br>&gt;<br>&gt; N.<br>&gt; _________________________________________________
<br>&gt;&nbsp;&nbsp; For list-related administrative tasks:<br>&gt;&nbsp;&nbsp; <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>&gt;<br>_________________________________________________
<br>&nbsp;&nbsp;For list-related administrative tasks:<br>&nbsp;&nbsp;<a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br></blockquote></div><br>