ydbi 0.5.2 → 0.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/workflows/ruby.yml +35 -0
- data/.gitignore +8 -0
- data/.travis.yml +15 -0
- data/ChangeLog +339 -314
- data/Gemfile +5 -0
- data/Rakefile +10 -0
- data/TODO +44 -0
- data/bench/bench.rb +79 -0
- data/build/rake_task_lib.rb +186 -0
- data/doc/DBD_SPEC.rdoc +88 -0
- data/doc/DBI_SPEC.rdoc +157 -0
- data/doc/homepage/contact.html +62 -0
- data/doc/homepage/development.html +124 -0
- data/doc/homepage/index.html +83 -0
- data/doc/homepage/ruby-dbi.css +91 -0
- data/lib/dbd/Mysql.rb +137 -0
- data/lib/dbd/ODBC.rb +89 -0
- data/lib/dbd/Pg.rb +188 -0
- data/lib/dbd/SQLite.rb +97 -0
- data/lib/dbd/SQLite3.rb +124 -0
- data/lib/dbd/mysql/database.rb +405 -0
- data/lib/dbd/mysql/driver.rb +125 -0
- data/lib/dbd/mysql/statement.rb +188 -0
- data/lib/dbd/odbc/database.rb +128 -0
- data/lib/dbd/odbc/driver.rb +38 -0
- data/lib/dbd/odbc/statement.rb +137 -0
- data/lib/dbd/pg/database.rb +504 -0
- data/lib/dbd/pg/exec.rb +47 -0
- data/lib/dbd/pg/statement.rb +160 -0
- data/lib/dbd/pg/tuples.rb +121 -0
- data/lib/dbd/pg/type.rb +209 -0
- data/lib/dbd/sqlite/database.rb +151 -0
- data/lib/dbd/sqlite/statement.rb +125 -0
- data/lib/dbd/sqlite3/database.rb +201 -0
- data/lib/dbd/sqlite3/statement.rb +78 -0
- data/lib/dbi.rb +14 -17
- data/lib/dbi/utils/date.rb +7 -3
- data/lib/dbi/version.rb +1 -1
- data/prototypes/types2.rb +237 -0
- data/readme.md +15 -0
- data/setup.rb +1585 -0
- data/test/DBD_TESTS +50 -0
- data/test/TESTING +16 -0
- data/test/dbd/general/test_database.rb +206 -0
- data/test/dbd/general/test_statement.rb +326 -0
- data/test/dbd/general/test_types.rb +296 -0
- data/test/dbd/mysql/base.rb +26 -0
- data/test/dbd/mysql/down.sql +19 -0
- data/test/dbd/mysql/test_blob.rb +18 -0
- data/test/dbd/mysql/test_new_methods.rb +7 -0
- data/test/dbd/mysql/test_patches.rb +111 -0
- data/test/dbd/mysql/up.sql +28 -0
- data/test/dbd/odbc/base.rb +30 -0
- data/test/dbd/odbc/down.sql +19 -0
- data/test/dbd/odbc/test_new_methods.rb +12 -0
- data/test/dbd/odbc/test_ping.rb +10 -0
- data/test/dbd/odbc/test_statement.rb +44 -0
- data/test/dbd/odbc/test_transactions.rb +58 -0
- data/test/dbd/odbc/up.sql +33 -0
- data/test/dbd/postgresql/base.rb +31 -0
- data/test/dbd/postgresql/down.sql +31 -0
- data/test/dbd/postgresql/test_arrays.rb +179 -0
- data/test/dbd/postgresql/test_async.rb +121 -0
- data/test/dbd/postgresql/test_blob.rb +36 -0
- data/test/dbd/postgresql/test_bytea.rb +87 -0
- data/test/dbd/postgresql/test_ping.rb +10 -0
- data/test/dbd/postgresql/test_timestamp.rb +77 -0
- data/test/dbd/postgresql/test_transactions.rb +58 -0
- data/test/dbd/postgresql/testdbipg.rb +307 -0
- data/test/dbd/postgresql/up.sql +60 -0
- data/test/dbd/sqlite/base.rb +32 -0
- data/test/dbd/sqlite/test_database.rb +30 -0
- data/test/dbd/sqlite/test_driver.rb +68 -0
- data/test/dbd/sqlite/test_statement.rb +112 -0
- data/test/dbd/sqlite/up.sql +25 -0
- data/test/dbd/sqlite3/base.rb +32 -0
- data/test/dbd/sqlite3/test_database.rb +77 -0
- data/test/dbd/sqlite3/test_driver.rb +67 -0
- data/test/dbd/sqlite3/test_statement.rb +88 -0
- data/test/dbd/sqlite3/up.sql +33 -0
- data/test/dbi/tc_columninfo.rb +4 -9
- data/test/dbi/tc_date.rb +2 -9
- data/test/dbi/tc_dbi.rb +3 -9
- data/test/dbi/tc_row.rb +17 -23
- data/test/dbi/tc_sqlbind.rb +6 -7
- data/test/dbi/tc_statementhandle.rb +3 -4
- data/test/dbi/tc_time.rb +2 -8
- data/test/dbi/tc_timestamp.rb +2 -16
- data/test/dbi/tc_types.rb +5 -11
- data/test/ts_dbd.rb +131 -0
- data/ydbi.gemspec +23 -0
- metadata +128 -10
@@ -0,0 +1,62 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>
|
6
|
+
<title>Ruby/DBI - Direct database access layer for Ruby</title>
|
7
|
+
<link rel="stylesheet" type="text/css" href="ruby-dbi.css"/>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div class="body-container">
|
11
|
+
<h1>Ruby/DBI - Contact Information</h1>
|
12
|
+
<div class="main-container">
|
13
|
+
<div class="nav-container">
|
14
|
+
<h1>Links</h1>
|
15
|
+
<a href="index.html">Home</a>
|
16
|
+
<a href="http://rubyforge.org/projects/ruby-dbi">RubyForge Project</a>
|
17
|
+
<a href="http://ruby-dbi.rubyforge.org/rdoc/index.html">RDoc</a>
|
18
|
+
<a href="development.html">Developer Information</a>
|
19
|
+
<a href="http://www.kitebird.com/articles/ruby-dbi.html">Ruby/DBI Tutorial</a>
|
20
|
+
<a href="contact.html">Contact/Reporting Bugs</a>
|
21
|
+
</div>
|
22
|
+
<p>
|
23
|
+
If you'd like to contact us to report a bug or submit a patch,
|
24
|
+
please use the <a
|
25
|
+
href="http://rubyforge.org/tracker/?group_id=234">tracker</a>
|
26
|
+
on RubyForge.
|
27
|
+
</p>
|
28
|
+
|
29
|
+
<p>
|
30
|
+
If you'd like to ask questions about using Ruby/DBI, there is a
|
31
|
+
<a href="http://rubyforge.org/mailman/listinfo/ruby-dbi-users">ruby-dbi-users</a> email list where those questions
|
32
|
+
can be answered. Likewise, <a
|
33
|
+
href="http://rubyforge.org/mailman/listinfo/ruby-dbi-bugs">ruby-dbi-bugs</a>
|
34
|
+
is for discussing bug reports in detail, and <a
|
35
|
+
href="http://rubyforge.org/mailman/listinfo/ruby-dbi-devel-new">ruby-dbi-devel-new</a> is for discussing future
|
36
|
+
development and management of the project.
|
37
|
+
</p>
|
38
|
+
|
39
|
+
<p>
|
40
|
+
If you're an irc user, the <b>#ruby-dbi</b> irc channel on
|
41
|
+
<b>freenode</b> will get you in touch with developers and
|
42
|
+
advanced users.
|
43
|
+
</p>
|
44
|
+
|
45
|
+
<p>
|
46
|
+
If these avenues are not working for you for some reason,
|
47
|
+
please feel free to contact <a
|
48
|
+
href="mailto:erik-at-hollensbe-dot-org">Erik</a>
|
49
|
+
directly. He will be glad to help!
|
50
|
+
</p>
|
51
|
+
</div>
|
52
|
+
<br />
|
53
|
+
<br />
|
54
|
+
<div class="copyright">
|
55
|
+
©2008 Erik Hollensbe, all rights reserved. Please see the
|
56
|
+
README file for the full copyright notice. Please see the
|
57
|
+
LICENSE file in the source package for information on
|
58
|
+
redistributing the source or any of the site content.
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
</body>
|
62
|
+
</html>
|
@@ -0,0 +1,124 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>
|
6
|
+
<title>Ruby/DBI - Direct database access layer for Ruby</title>
|
7
|
+
<link rel="stylesheet" type="text/css" href="ruby-dbi.css"/>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div class="body-container">
|
11
|
+
<h1>Ruby/DBI - Development Information</h1>
|
12
|
+
<div class="main-container">
|
13
|
+
<div class="nav-container">
|
14
|
+
<h1>Links</h1>
|
15
|
+
<a href="index.html">Home</a>
|
16
|
+
<a href="http://rubyforge.org/projects/ruby-dbi">RubyForge Project</a>
|
17
|
+
<a href="http://ruby-dbi.rubyforge.org/rdoc/index.html">RDoc</a>
|
18
|
+
<a href="development.html">Developer Information</a>
|
19
|
+
<a href="http://www.kitebird.com/articles/ruby-dbi.html">Ruby/DBI Tutorial</a>
|
20
|
+
<a href="contact.html">Contact/Reporting Bugs</a>
|
21
|
+
</div>
|
22
|
+
<p>
|
23
|
+
Regarding patches, please consider these issues:
|
24
|
+
<br />
|
25
|
+
<ul>
|
26
|
+
<li>
|
27
|
+
If your patch does not contain tests, it better be
|
28
|
+
very compelling, as someone else will be forced to
|
29
|
+
write them.
|
30
|
+
</li>
|
31
|
+
<li>
|
32
|
+
Please ensure your patch addresses the whole
|
33
|
+
problem space. If it's a patch for DBI, makes sure it
|
34
|
+
works with <b>all</b> DBDs. Likewise, if it is DBD
|
35
|
+
scope, it should handle all versions of the database
|
36
|
+
that DBD supports.
|
37
|
+
</li>
|
38
|
+
<li>
|
39
|
+
Please follow the existing formatting in the
|
40
|
+
files. Check your diffs to see that you aren't
|
41
|
+
generating patches with tons of formatting-only
|
42
|
+
changes.
|
43
|
+
</li>
|
44
|
+
<li>
|
45
|
+
If you plan a series of patches, consider setting
|
46
|
+
up a git repository, or merging your patches before
|
47
|
+
you submit them.
|
48
|
+
</li>
|
49
|
+
</ul>
|
50
|
+
<br />
|
51
|
+
</p>
|
52
|
+
<p>
|
53
|
+
Regarding bug reports, please consider these issues:
|
54
|
+
<br />
|
55
|
+
<ul>
|
56
|
+
<li>
|
57
|
+
Use the tracker if you can. Posting to the lists or
|
58
|
+
a private email is ok, but if it's multipart or
|
59
|
+
significantly complex you may be asked to post it
|
60
|
+
to the tracker anyways.
|
61
|
+
</li>
|
62
|
+
<li>
|
63
|
+
Please search the tracker first, and have a
|
64
|
+
repeatable use case that accurately describes your
|
65
|
+
problem.
|
66
|
+
</li>
|
67
|
+
<li>
|
68
|
+
If you post to the tracker, have a rubyforge
|
69
|
+
account and ensure you're logged in. If you don't,
|
70
|
+
and questions to need to be asked, your bug will
|
71
|
+
likely be quickly round-filed. Our tracker is not
|
72
|
+
your cathartic dumping ground.
|
73
|
+
</li>
|
74
|
+
</ul>
|
75
|
+
<p>
|
76
|
+
If you'd like to contact us to report a bug or submit a patch,
|
77
|
+
please use the <a
|
78
|
+
href="http://rubyforge.org/tracker/?group_id=234">tracker</a>
|
79
|
+
on RubyForge. If you plan long term development, consider
|
80
|
+
setting up a git repository other developers can pull from.
|
81
|
+
</p>
|
82
|
+
|
83
|
+
<p>
|
84
|
+
Please see the <a href="contact.html">contact</a> page
|
85
|
+
about contacting developers or mailing lists.
|
86
|
+
</p>
|
87
|
+
|
88
|
+
<p>
|
89
|
+
We now use 'git' for our revision control system. We now push
|
90
|
+
to several locations:
|
91
|
+
|
92
|
+
<dl>
|
93
|
+
<dt>Rubyforge</dt>
|
94
|
+
<dd>git://rubyforge.org/ruby-dbi.git</dd>
|
95
|
+
<dt>GitHub</dt>
|
96
|
+
<dd>git://github.com/erikh/ruby-dbi.git</dd>
|
97
|
+
<dt>hollensbe.org</dt>
|
98
|
+
<dd>git://hollensbe.org/git/ruby-dbi.git</dd>
|
99
|
+
</dl>
|
100
|
+
<br />
|
101
|
+
|
102
|
+
Forward development occurs in the 'development' branch,
|
103
|
+
which is version-tagged and merged into 'master' at release
|
104
|
+
time. 'master' is used to track release versions and
|
105
|
+
maintenance to those versions.
|
106
|
+
</p>
|
107
|
+
|
108
|
+
<p>
|
109
|
+
Ruby/DBI is a BSD-licensed product. As a result, the
|
110
|
+
licensing on your patches must be the same. Please do
|
111
|
+
not send patches that are of any other license. Thanks!
|
112
|
+
</p>
|
113
|
+
</div>
|
114
|
+
<br />
|
115
|
+
<br />
|
116
|
+
<div class="copyright">
|
117
|
+
©2008 Erik Hollensbe, all rights reserved. Please see the
|
118
|
+
README file for the full copyright notice. Please see the
|
119
|
+
LICENSE file in the source package for information on
|
120
|
+
redistributing the source or any of the site content.
|
121
|
+
</div>
|
122
|
+
</div>
|
123
|
+
</body>
|
124
|
+
</html>
|
@@ -0,0 +1,83 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>
|
6
|
+
<title>Ruby/DBI - Direct database access layer for Ruby</title>
|
7
|
+
<link rel="stylesheet" type="text/css" href="ruby-dbi.css"/>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div class="body-container">
|
11
|
+
<h1>Ruby/DBI - Direct database access layer for Ruby</h1>
|
12
|
+
<div class="main-container">
|
13
|
+
<div class="nav-container">
|
14
|
+
<h1>Links</h1>
|
15
|
+
<a href="index.html">Home</a>
|
16
|
+
<a href="http://rubyforge.org/projects/ruby-dbi">RubyForge Project</a>
|
17
|
+
<a href="http://ruby-dbi.rubyforge.org/rdoc/index.html">RDoc</a>
|
18
|
+
<a href="development.html">Developer Information</a>
|
19
|
+
<a href="http://www.kitebird.com/articles/ruby-dbi.html">Ruby/DBI Tutorial</a>
|
20
|
+
<a href="contact.html">Contact/Reporting Bugs</a>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<p>
|
24
|
+
Ruby/DBI is a database interface in the spirit of Perl's prolific
|
25
|
+
<a href="http://search.cpan.org/~timb/DBI/DBI.pm">DBI</a> authored
|
26
|
+
by Tim Bunce.
|
27
|
+
</p>
|
28
|
+
|
29
|
+
<p>
|
30
|
+
Ruby/DBI differs in quite a few ways, however. It incorporates
|
31
|
+
many "rubyisms" while maintaining the core DBI interface, and a
|
32
|
+
suite of commonly used DBD's are maintained with the
|
33
|
+
application.
|
34
|
+
</p>
|
35
|
+
|
36
|
+
<p>
|
37
|
+
Ruby/DBI is <i>not</i> an ORM, like <a
|
38
|
+
href="http://ar.rubyonrails.com">ActiveRecord</a> or <a
|
39
|
+
href="http://datamapper.rubyforge.org">DataMapper</a>. It is a
|
40
|
+
lightweight, centralized API to database manipulation. An ORM may
|
41
|
+
or may not be what you want for a given situation, due to weight,
|
42
|
+
ease-of-use or other issues. Our goal with Ruby/DBI is to provide a
|
43
|
+
compelling, lightweight interface that you can use for things where
|
44
|
+
an ORM is too much or too cumbersome.
|
45
|
+
</p>
|
46
|
+
|
47
|
+
<p>
|
48
|
+
Getting started with Ruby/DBI is very easy if you have a working
|
49
|
+
knowledge of SQL and your target database. Read the <a
|
50
|
+
href="http://ruby-dbi.rubyforge.org/rdoc/index.html">Documentation</a>
|
51
|
+
to get on your way!
|
52
|
+
</p>
|
53
|
+
|
54
|
+
<p>
|
55
|
+
The maintainer, Erik Hollensbe, has made a commitment to
|
56
|
+
keeping Ruby/DBI compatible with future Ruby releases. There is
|
57
|
+
also a significant interest in enhancing the suite by further
|
58
|
+
clarifying and enforcing the interface, and further tailoring DBI
|
59
|
+
for the specific needs of Ruby users (as opposed to many of the
|
60
|
+
Perlisms maintained) without impacting the goal of the project.
|
61
|
+
There is also significant effort applied to clarifying the
|
62
|
+
underpinnings, making debugging and development simpler.
|
63
|
+
</p>
|
64
|
+
|
65
|
+
<p>
|
66
|
+
Ruby/DBI is a very old project as far as the ruby community is
|
67
|
+
concerned, tracing back to at least 2001. There are plenty of
|
68
|
+
people who <a
|
69
|
+
href="http://ruby-dbi.rubyforge.org/rdoc/index.html">have
|
70
|
+
contributed</a> to this effort. Big thanks to the original
|
71
|
+
project lead, Michael Neumann, and Francis Hwang and Daniel Berger, who held the
|
72
|
+
project in escrow for such a long time.
|
73
|
+
</p>
|
74
|
+
</div>
|
75
|
+
<div class="copyright">
|
76
|
+
©2008 Erik Hollensbe, all rights reserved. Please see the
|
77
|
+
README file for the full copyright notice. Please see the
|
78
|
+
LICENSE file in the source package for information on
|
79
|
+
redistributing the source or any of the site content.
|
80
|
+
</div>
|
81
|
+
</div>
|
82
|
+
</body>
|
83
|
+
</html>
|
@@ -0,0 +1,91 @@
|
|
1
|
+
BODY {
|
2
|
+
background-color: #666;
|
3
|
+
}
|
4
|
+
|
5
|
+
a:visited {
|
6
|
+
color: #144;
|
7
|
+
}
|
8
|
+
|
9
|
+
a {
|
10
|
+
color: white;
|
11
|
+
}
|
12
|
+
|
13
|
+
a:active {
|
14
|
+
text-decoration: none;
|
15
|
+
}
|
16
|
+
|
17
|
+
a:hover {
|
18
|
+
text-decoration: none;
|
19
|
+
}
|
20
|
+
|
21
|
+
.body-container {
|
22
|
+
margin-left: auto;
|
23
|
+
margin-right: auto;
|
24
|
+
margin-top: 50px;
|
25
|
+
width: 80%;
|
26
|
+
background-color: #AAA;
|
27
|
+
color: black;
|
28
|
+
padding: 10px;
|
29
|
+
border: 1px solid black;
|
30
|
+
}
|
31
|
+
|
32
|
+
h1 {
|
33
|
+
display: block;
|
34
|
+
margin: 2em;
|
35
|
+
border: 1px solid black;
|
36
|
+
padding: 1em;
|
37
|
+
color: #444;
|
38
|
+
font-size: 1em;
|
39
|
+
text-align: center;
|
40
|
+
font-family: sans-serif;
|
41
|
+
}
|
42
|
+
|
43
|
+
.main-container {
|
44
|
+
margin: 2em;
|
45
|
+
}
|
46
|
+
|
47
|
+
.nav-container {
|
48
|
+
display: block;
|
49
|
+
border: 1px solid black;
|
50
|
+
float: left;
|
51
|
+
vertical-align; top:
|
52
|
+
font-size: .8em;
|
53
|
+
min-width: 20%;
|
54
|
+
margin-right: 2em;
|
55
|
+
margin-bottom: 2em;
|
56
|
+
}
|
57
|
+
|
58
|
+
.nav-container h1 {
|
59
|
+
margin: 0;
|
60
|
+
padding: 0;
|
61
|
+
border: 0;
|
62
|
+
border-bottom: 1px solid black;
|
63
|
+
font-size: 1.2em;
|
64
|
+
font-weight: bold;
|
65
|
+
color: black;
|
66
|
+
text-align: center;
|
67
|
+
font-family: sans-serif;
|
68
|
+
}
|
69
|
+
|
70
|
+
.nav-container a {
|
71
|
+
display: block;
|
72
|
+
padding: 5px;
|
73
|
+
}
|
74
|
+
|
75
|
+
.nav-container a:hover {
|
76
|
+
background-color: #444;
|
77
|
+
color: white;
|
78
|
+
font-weight: bold;
|
79
|
+
}
|
80
|
+
|
81
|
+
.copyright {
|
82
|
+
display: block;
|
83
|
+
margin: 2em;
|
84
|
+
border: 1px solid black;
|
85
|
+
padding: 1em;
|
86
|
+
color: #444;
|
87
|
+
font-size: 0.6em;
|
88
|
+
text-align: center;
|
89
|
+
font-family: sans-serif;
|
90
|
+
}
|
91
|
+
|
data/lib/dbd/Mysql.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2001, 2002 Michael Neumann <neumann@s-direktnet.de>
|
3
|
+
#
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
7
|
+
# modification, are permitted provided that the following conditions
|
8
|
+
# are met:
|
9
|
+
# 1. Redistributions of source code must retain the above copyright
|
10
|
+
# notice, this list of conditions and the following disclaimer.
|
11
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
12
|
+
# notice, this list of conditions and the following disclaimer in the
|
13
|
+
# documentation and/or other materials provided with the distribution.
|
14
|
+
# 3. The name of the author may not be used to endorse or promote products
|
15
|
+
# derived from this software without specific prior written permission.
|
16
|
+
#
|
17
|
+
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
18
|
+
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
19
|
+
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
20
|
+
# THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
21
|
+
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
22
|
+
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
23
|
+
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
24
|
+
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
25
|
+
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
26
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
+
#
|
28
|
+
# $Id$
|
29
|
+
#++
|
30
|
+
|
31
|
+
begin
|
32
|
+
require 'rubygems'
|
33
|
+
gem 'mysql'
|
34
|
+
gem 'dbi'
|
35
|
+
rescue LoadError => e
|
36
|
+
end
|
37
|
+
|
38
|
+
require 'dbi'
|
39
|
+
require "mysql"
|
40
|
+
require "thread" # for Mutex
|
41
|
+
|
42
|
+
module DBI
|
43
|
+
module DBD
|
44
|
+
#
|
45
|
+
# DBD::Mysql - Database Driver for the MySQL database system.
|
46
|
+
#
|
47
|
+
# Requires DBI and the 'mysql' gem or package to work.
|
48
|
+
#
|
49
|
+
# Only things that extend DBI's results are documented.
|
50
|
+
#
|
51
|
+
module Mysql
|
52
|
+
VERSION = "0.4.4"
|
53
|
+
DESCRIPTION = "MySQL DBI DBD, Leverages 'mysql' low-level driver"
|
54
|
+
|
55
|
+
MyError = ::MysqlError
|
56
|
+
|
57
|
+
#
|
58
|
+
# returns 'Mysql'
|
59
|
+
#
|
60
|
+
# See DBI::TypeUtil#convert for more information.
|
61
|
+
#
|
62
|
+
def self.driver_name
|
63
|
+
"Mysql"
|
64
|
+
end
|
65
|
+
|
66
|
+
DBI::TypeUtil.register_conversion(driver_name) do |obj|
|
67
|
+
newobj = case obj
|
68
|
+
when ::DBI::Binary
|
69
|
+
obj = obj.to_s.gsub(/\\/) { "\\\\" }
|
70
|
+
obj = obj.to_s.gsub(/'/) { "''" }
|
71
|
+
"'#{obj}'"
|
72
|
+
when ::DateTime
|
73
|
+
"'#{obj.strftime("%Y-%m-%d %H:%M:%S")}'"
|
74
|
+
when ::Time
|
75
|
+
"'#{obj.strftime("%H:%M:%S")}'"
|
76
|
+
when ::Date
|
77
|
+
"'#{obj.strftime("%Y-%m-%d")}'"
|
78
|
+
when ::NilClass
|
79
|
+
"NULL"
|
80
|
+
else
|
81
|
+
obj
|
82
|
+
end
|
83
|
+
|
84
|
+
if newobj.object_id == obj.object_id
|
85
|
+
[newobj, true]
|
86
|
+
else
|
87
|
+
[newobj, false]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
#
|
95
|
+
# Utility Methods for the MySQL DBD.
|
96
|
+
#
|
97
|
+
|
98
|
+
module DBI::DBD::Mysql::Util
|
99
|
+
private
|
100
|
+
|
101
|
+
# Raise exception using information from MysqlError object e.
|
102
|
+
# For state value, use SQLSTATE value if mysql-ruby defines
|
103
|
+
# sqlstate method, otherwise nil.
|
104
|
+
def error(e)
|
105
|
+
sqlstate = e.respond_to?("sqlstate") ? e.sqlstate : nil
|
106
|
+
raise DBI::DatabaseError.new(e.message, e.errno, sqlstate)
|
107
|
+
end
|
108
|
+
|
109
|
+
end # module Util
|
110
|
+
|
111
|
+
module DBI::DBD::Mysql::Type
|
112
|
+
#
|
113
|
+
# Custom handling for DATE types in MySQL. See DBI::Type for more
|
114
|
+
# information.
|
115
|
+
#
|
116
|
+
class Date < DBI::Type::Null
|
117
|
+
def self.parse(obj)
|
118
|
+
obj = super
|
119
|
+
return obj unless obj
|
120
|
+
|
121
|
+
case obj.class
|
122
|
+
when ::Date
|
123
|
+
return obj
|
124
|
+
when ::String
|
125
|
+
return ::Date.strptime(obj, "%Y-%m-%d")
|
126
|
+
else
|
127
|
+
return ::Date.parse(obj.to_s) if obj.respond_to? :to_s
|
128
|
+
return ::Date.parse(obj.to_str) if obj.respond_to? :to_str
|
129
|
+
return obj
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
require 'dbd/mysql/driver'
|
136
|
+
require 'dbd/mysql/database'
|
137
|
+
require 'dbd/mysql/statement'
|