# SqlStatement 1.0.0 - hide the syntax of SQL behind familiar

**URL:** <https://www.ruby-forum.com/t/sqlstatement-1-0-0-hide-the-syntax-of-sql-behind-familiar/71513>\
**Category:** Ruby\
**Created:** [October 9, 2006, 4:51pm UTC](https://www.ruby-forum.com/t/sqlstatement-1-0-0-hide-the-syntax-of-sql-behind-familiar/71513 "2006-10-09T16:51:50Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![sevensoft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@sevensoft](https://www.ruby-forum.com/u/sevensoft)\
**Post date:** [October 9, 2006, 4:51pm UTC](https://www.ruby-forum.com/t/sqlstatement-1-0-0-hide-the-syntax-of-sql-behind-familiar/71513/1 "2006-10-09T16:51:50Z")

</div>

sqlstatement - Generate complex SQL statements programmatically

The main goal of this library is to be able to construct an SQL  
statement from “slices” that concern different aspects of the final  
query (perhaps in different places in your code) and then combine them  
all together into one statement easily.

Another important goal of this library is to give some consistent Ruby  
syntax to three statements (INSERT, SELECT, and UPDATE) that seem to  
have different enough syntax that one has two write different code to  
generate each kind of statement.

I use my SQL database (specifically MySQL) largely as a bulk data  
processing engine, by doing INSERT…SELECT or CREATE TABLE…SELECT  
statements. This library is intended to make that kind of coding easier.  
I expect that Object Relational mappers (such as ActiveRecord) are more  
useful for most people, who are performing queries and  
inserting/updating/querying for individual records. I have nevertheless  
added INSERT…VALUES statements, and will add other statements soon,  
for  
consistency.

This library is inspired by CLSQL for Common LISP, or SchemeQL for  
Scheme, although it is very different from these two libraries. Scheme  
and LISPâ??s use of s-expressions make it very easy to construct an entire  
sublanguage for the WHERE clause, simply by list parsing. The Criteria  
library for Ruby has attempted this, but in a more limited manner than  
SchemeQL or CLSQL. My library aims to cover much of the functionality in  
these libraries.

This library doesnâ??t try to abstract out the limitations of your DBMS,  
and I think that the SQL it uses should be fairly portable, in large  
measure because it hasnâ??t attempted to deal with serious CREATE TABLE  
statements, where a lot of syntax concerning types, keys and sequences  
is much more variable.

This library can be downloaded from  
[http://rubyforge.org/projects/sqlstatement/](http://rubyforge.org/projects/sqlstatement/)  
Its rdoc documentation is online at [http://sqlstatement.rubyforge.org/](http://sqlstatement.rubyforge.org/)

License: BSD license

---

<div class="post-metadata">

**Author:** ![sevensoft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@sevensoft](https://www.ruby-forum.com/u/sevensoft)\
**Post date:** [October 9, 2006, 8:22pm UTC](https://www.ruby-forum.com/t/sqlstatement-1-0-0-hide-the-syntax-of-sql-behind-familiar/71513/2 "2006-10-09T20:22:25Z")

</div>

On Oct 9, 2006, at 7:50 AM, Ken B. wrote:

> generate each kind of statement.  
> added INSERT…VALUES statements, and will add other statements  
> functionality in  
> Its rdoc documentation is online at [http://sqlstatement.rubyforge.org/](http://sqlstatement.rubyforge.org/)
> 
> License: BSD license
> 
> –  
> Ken B… PhD candidate. Linguistic Cognition Laboratory.

Hi Ken-

```
This sounds really cool. But I don't see any examples really in the

```

docs. Do you have a page with some simple examples of how you would  
use this and why its so cool?

Cheers-  
-Ezra

---

<div class="post-metadata">

**Author:** ![sevensoft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@sevensoft](https://www.ruby-forum.com/u/sevensoft)\
**Post date:** [October 9, 2006, 8:36pm UTC](https://www.ruby-forum.com/t/sqlstatement-1-0-0-hide-the-syntax-of-sql-behind-familiar/71513/3 "2006-10-09T20:36:35Z")

</div>

On Tue, 10 Oct 2006 03:21:35 +0900, Ezra Z. wrote:

> > syntax to three statements (INSERT, SELECT, and UPDATE) that seem to  
> > inserting/updating/querying for individual records. I have  
> > library for Ruby has attempted this, but in a more limited manner than  
> > This library can be downloaded from  
> > Hi Ken-
> 
> This sounds really cool. But I don’t see any examples really in the  
> docs. Do you have a page with some simple examples of how you would  
> use this and why its so cool?
> 
> Cheers-  
> -Ezra

I’ve got an example.rb file in the gem (in bin/). I wasn’t sure where  
the  
best place was to put it in the gem, so if you know of another more  
visible place (where it won’t get documented like it’s part of the  
library), I’ll happily move it there.

–Ken

---

<div class="post-metadata">

**Author:** ![sevensoft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@sevensoft](https://www.ruby-forum.com/u/sevensoft)\
**Post date:** [October 9, 2006, 8:48pm UTC](https://www.ruby-forum.com/t/sqlstatement-1-0-0-hide-the-syntax-of-sql-behind-familiar/71513/4 "2006-10-09T20:48:36Z")

</div>

On Tue, 10 Oct 2006, Ken B. wrote:

> I’ve got an example.rb file in the gem (in bin/). I wasn’t sure where the  
> best place was to put it in the gem, so if you know of another more  
> visible place (where it won’t get documented like it’s part of the  
> library), I’ll happily move it there.
> 
> –Ken

here’s the gemspec i use. it’s for directories named ‘libname-x.x.x’,  
but you  
can ignore that part if you wish.

~: \> cat a.rb  
lib, version =  
File::basename(File::dirname(File::expand\_path( **FILE** ))).split %r/-/,  
2

require ‘rubygems’

Gem::Specification::new do |spec|  
spec.name = lib  
spec.version = version  
spec.platform = Gem::Platform::RUBY  
spec.summary = lib

# 

# the important part

# 

```
 spec.files = Dir::glob " **/**"
 spec.executables = Dir::glob("bin/*").map{|exe| File::basename exe}

 spec.require_path = "lib"
 spec.autorequire = lib

 spec.has_rdoc = File::exist? "doc"
 spec.test_suite_file = "test/#{ lib }.rb" if File::directory? 

```

“test”

```
 spec.author = "Ara T. Howard"
 spec.email = "removed_email_address@domain.invalid"
 spec.homepage = "http://codeforpeople.com/lib/ruby/#{ lib }/"

```

end

so, this just grabs everything. then you can make a dir called  
samples/,  
examples/, or whatever and it gets included.

regards.

-a
