Second pass at adding key files

This commit is contained in:
dsainty
2024-06-17 22:24:05 +10:00
parent aa25e9347f
commit b6fc94ff0f
923 changed files with 243184 additions and 0 deletions

View File

@ -0,0 +1,411 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Admin - instant admin for any sql table.</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#usage">Usage</a></li>
<li><a href="#subclassing_the_admin">Subclassing the admin</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Admin - instant admin for any sql table.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
my $cgi = new GT::CGI;
my $db = new GT::SQL '/path/to/def';
my $admin = new GT::SQL::Admin;
if ($admin-&gt;for_me($cgi)) {
$admin-&gt;process ( db =&gt; $db, cgi =&gt; $cgi );
}</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::SQL::Admin provides an easy way to build a table/relation
management application. It provides all the HTML and code to
easily:</p>
<pre>
1. Add records
2. Delete records
3. Modify records
4. Search records
5. Add columns
6. Drop columns
7. Alter table properties
8. Import data
9. Export data</pre>
<p>all in about 6 lines of code.</p>
<p>
</p>
<h2><a name="usage">Usage</a></h2>
<p>To use GT::SQL::Admin you need to pass in an existing
<a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL.html">the GT::SQL manpage</a> object, and a <a href="glist.cgi?do=admin_gtdoc&topic=/GT/CGI.html">the GT::CGI manpage</a> object.</p>
<p>In it's simplest usage, you can simply call:</p>
<pre>
my $admin = new GT::SQL::Admin;
$admin-&gt;process ( db =&gt; $db, cgi =&gt; $cgi );</pre>
<p>and the admin module will figure out what was requested and display
the appropriate screen. There is a $admin-&gt;for_me method that will
look to see if the cgi object contains something for the admin
to do, returning 1 if yes, 0 otherwise. You would then do:</p>
<pre>
my $cgi = new GT::CGI;
my $admin = new GT::SQL::Admin;
if ($admin-&gt;for_me($cgi)) {
$admin-&gt;process ( db =&gt; $db, cgi =&gt; $cgi );
}</pre>
<p>You can also call any of the methods individually. You can create an
add form like:</p>
<pre>
$admin-&gt;add_form;</pre>
<p>and it will be printed to STDOUT.</p>
<p>To change the look of a page, you can pass in strings or code refs
to display any of the following items:</p>
<pre>
start_html
header
start_form
end_form
footer
end_html</pre>
<p>and the admin will use your html/code when displaying. You can also pass
in to process:</p>
<pre>
record =&gt; 'MyObject'</pre>
<p>and the admin will use that string when displaying titles like 'Add MyObject'.
If you don't specify, it will default to the name of the table.</p>
<p>
</p>
<h2><a name="subclassing_the_admin">Subclassing the admin</a></h2>
<p>You can enhance the functionality of an admin quite easily. By default
GT::SQL::Admin expects to find a GT::SQL object, a GT::CGI object, and uses
internally a GT::SQL::Display::HTML object for any form/record html
generation.</p>
<p>Alternatively, you can subclass one or more of the above and use your
own libraries. For instance, if you wanted to expand the form generation,
you could subclass the GT::SQL::Display::HTML object and override the <code>display()</code>
and <code>form()</code> method with your own.</p>
<p>The admin will pass in a 'mode' to both display and form that will tell
you what it is using the form for. This can be one of:</p>
<pre>
search_form
search_results
add_form
add_success
delete_search_form
delete_search_results
download_file
modify_search_form
modify_search_results
modify_form
modify_success
modify_multi_search_results
modify_multi_results_norec
modify_multi_result_changed
modify_multi_results_err</pre>
<p>There are also several options that can be passed in. See the
<a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Display/HTML.html">the GT::SQL::Display::HTML manpage</a> module for more information.
</p>
<p>Also be sure to read about subclassing in <a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL.html">the GT::SQL manpage</a>.
</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a>
</p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Admin.pm,v 1.146 2005/03/15 00:35:29 brewt Exp $
</p>
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Base.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,390 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Condition - Creates complex where clauses</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsys">SYNOPSYS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Condition - Creates complex where clauses</p>
<p>
</p>
<hr />
<h1><a name="synopsys">SYNOPSYS</a></h1>
<pre>
my $cond = GT::SQL::Condition-&gt;new(Column =&gt; LIKE =&gt; 'foo%');
print $cond-&gt;sql;</pre>
<pre>
my $cond = GT::SQL::Condition-&gt;new(
Column =&gt; LIKE =&gt; 'foo%',
Column2 =&gt; '&lt;' =&gt; 'abc'
);
$cond-&gt;bool('OR');
print $cond-&gt;sql;</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>The condition module is useful for generating complex SQL WHERE clauses. At
it's simplest, a condition is composed of three parts: column, condition and
value.</p>
<p>Here are some examples.</p>
<p>To find all users with a first name that starts with Alex use:</p>
<pre>
my $cond = GT::SQL::Condition-&gt;new(FirstName =&gt; LIKE =&gt; 'Alex%');</pre>
<p>To find users with first name like alex, <strong>and</strong> last name like krohn use:</p>
<pre>
my $cond = GT::SQL::Condition-&gt;new(
FirstName =&gt; LIKE =&gt; 'Alex%',
LastName =&gt; LIKE =&gt; 'Krohn%'
);</pre>
<p>To find users with first name like alex <strong>or</strong> last name like krohn use:</p>
<pre>
my $cond = GT::SQL::Condition-&gt;new(
FirstName =&gt; LIKE =&gt; 'Alex%',
LastName =&gt; LIKE =&gt; 'Krohn%'
);
$cond-&gt;bool('OR');</pre>
<p>You may also specify this as:</p>
<pre>
my $cond = GT::SQL::Condition-&gt;new(
FirstName =&gt; LIKE =&gt; 'Alex%',
LastName =&gt; LIKE =&gt; 'Krohn%',
'OR'
);</pre>
<p>Now say we wanted something a bit more complex that would normally involve
setting parentheses. We want to find users who have either first name like alex
or last name like krohn, and whose employer is Gossamer Threads. We could use:</p>
<pre>
my $cond1 = GT::SQL::Condition-&gt;new(
'FirstName', 'LIKE', 'Alex%',
'LastName', 'LIKE', 'Krohn%'
);
$cond1-&gt;bool('or');
my $cond2 = GT::SQL::Condition-&gt;new(
$cond1,
Employer =&gt; '=' =&gt; 'Gossamer Threads'
);</pre>
<p>By default, all values are quoted, so you don't need to bother using any quote
function. If you don't want something quoted (say you want to use a function
for example), then you pass in a reference.</p>
<p>For example, to find users who have a last name that sounds like 'krohn', you
could use your SQL engines SOUNDEX function:</p>
<pre>
my $cond = GT::SQL::Condition-&gt;new(LastName =&gt; '=' =&gt; \&quot;SOUNDEX('krohn')&quot;);</pre>
<p>and the right side wouldn't be quoted.</p>
<p>You can also use a condition object to specify a list of multiple values, which
will become the SQL 'IN' operator. For example, to match anyone with a first
name of Alex, Scott or Jason, you can do:</p>
<pre>
my $cond = GT::SQL::Condition-&gt;new(FirstName =&gt; IN =&gt; ['Alex', 'Scott', 'Jason']);</pre>
<p>which will turn into:</p>
<pre>
FirstName IN ('Alex', 'Scott', 'Jason')</pre>
<p>Note that when using multiple values, you can use '=' instead of 'IN'. Empty
lists will be treated as an impossible condition (1 = 0). This is primarily
useful for list handling list of id numbers.</p>
<p>To match NULL values, you can use <code>undef</code> for the value passed to the <code>add()</code>
method. If specifying '=' as the operator, it will automatically be changed to
'IS':</p>
<pre>
$cond-&gt;add(MiddleName =&gt; '=' =&gt; undef);</pre>
<p>becomes:</p>
<pre>
MiddleName IS NULL</pre>
<p>To negate your queries you can use the <code>not</code> function.</p>
<pre>
my $cond = GT::SQL::Condition-&gt;new(a =&gt; '=' =&gt; 5);
$cond-&gt;not;</pre>
<p>would translate into NOT (a = '5'). You can also do this all on one line like:</p>
<pre>
print GT::SQL::Condition-&gt;new(a =&gt; '=' =&gt; '5')-&gt;not-&gt;sql;</pre>
<p>This returns the sql right away.</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Condition.pm,v 1.44 2004/10/12 17:54:30 jagerman Exp $</p>
</body>
</html>

View File

@ -0,0 +1,553 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Creator - an object to create SQL tables.</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#cols">cols</a></li>
<li><a href="#pk">pk</a></li>
<li><a href="#ai">ai</a></li>
<li><a href="#index">index</a></li>
<li><a href="#unique">unique</a></li>
<li><a href="#fk">fk</a></li>
<li><a href="#search_driver">search_driver</a></li>
<li><a href="#create">create</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Creator - an object to create SQL tables.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
my $creator = $DB-&gt;creator('Newtable');
$creator-&gt;cols(
col1 =&gt; {
pos =&gt; 1
type =&gt; 'CHAR',
size =&gt; 50
},
col2 =&gt; {
pos =&gt; 2,
type =&gt; 'INT',
not_null =&gt; 1
}
);
$creator-&gt;pk('col2');
$creator-&gt;ai('col2');
$creator-&gt;create or die &quot;Unable to create: $GT::SQL::error&quot;;</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>A creator object is used to build new SQL tables.</p>
<p>To get a new creator object, you need to call <code>creator()</code> from an existing
GT::SQL object.</p>
<p>The object that is returned has methods to set up your table. You will need to
call this method for each table you want to create.</p>
<pre>
$creator = $obj-&gt;creator($table);</pre>
<p>You must pass in the name of the table you want to create. This means if you
have a table named <code>MyTable</code> you must call <code>-&gt;creator</code> with <code>'MyTable'</code>
as the argument.</p>
<pre>
$creator = $obj-&gt;creator('MyTable');</pre>
<p>From this point you can call create methods on your creator object to define
and create your table.</p>
<p>
</p>
<h2><a name="cols">cols</a></h2>
<p><em>cols</em> is used to define the columns that will be in the new table by setting
properties such as the type, whether it allows null values, unsigned etc.</p>
<p>For detailed information on the types and options accepted, please see
<a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Types.html">the GT::SQL::Types manpage</a>. The following describes the options accepted that do not
directly affect the underlying database:</p>
<dl>
<dt><strong><a name="item_values">values</a></strong><br />
</dt>
<dd>
This specifies the values for the <em>ENUM</em> column type. If you are using an
<em>ENUM</em> this must be set. The value for this should be an array reference of
the possible values for the <em>ENUM</em> column. The values in the array that is
passed in will be quoted by DBI's quote method.
</dd>
<p></p>
<dt><strong><a name="item_regex">regex</a></strong><br />
</dt>
<dd>
This is a regex that the value must pass before being inserted
into the database.
</dd>
<p></p>
<dt><strong><a name="item_form_display">form_display</a></strong><br />
</dt>
<dd>
This is a ``pretty name'' that will be used by the HTML module
for creating attractive forms automatically.
</dd>
<p></p>
<dt><strong><a name="item_form_size">form_size</a></strong><br />
</dt>
<dd>
This is the form field length to be used by the HTML module.
</dd>
<p></p>
<dt><strong><a name="item_form_type">form_type</a></strong><br />
</dt>
<dd>
This is the type of form to use by the HTML module: select, checkbox
radio, text, textarea or hidden.
</dd>
<p></p>
<dt><strong><a name="item_form_names">form_names</a></strong><br />
</dt>
<dd>
This is for multi select or checkboxes and is an array ref of names
that get displayed.
</dd>
<p></p>
<dt><strong><a name="item_form_values">form_values</a></strong><br />
</dt>
<dd>
This is for multi select or checkboxes and is an array ref of the
actual values that will be stored in the database.
</dd>
<p></p>
<dt><strong><a name="item_time_check">time_check</a></strong><br />
</dt>
<dd>
This is only useful for TIMESTAMP fields. If set to 1, the module
will not allow you to update a record which has an older timestamp
then what is in the database. This is very helpful for protecting
against multiple updates.
</dd>
<p></p>
<dt><strong><a name="item_weight">weight</a></strong><br />
</dt>
<dd>
By giving an item a weight, GT::SQL will maintain a search index
table, and use that search index table when called using query.
This is only useful for indexing large text fields and should not
be used normally. The higher the weight, the more influence that
column will have on the result. So if a Title was set to weight
3 and a Description to weight 1, then when doing a search, a match
in the title would make the result appear before a match in the
description.
</dd>
<p></p></dl>
<p>So an example would look like:</p>
<pre>
$creator-&gt;cols(
$col1 =&gt; {
type =&gt; 'ENUM',
values =&gt; ['val1', 'val2' ... ],
not_null =&gt; 1
},
$col2 =&gt; {
...
}
);</pre>
<p>Sets the relations columns as specified via method
parameters. The only required key for the has is type.
However some column types require other values be set
such as <em>ENUM</em> requires you specify the values.</p>
<p>
</p>
<h2><a name="pk">pk</a></h2>
<p><code>pk</code> lets you specify the primary keys for the current table.
This method can be called with an array of primary key columns
in which case all the specified column names in the array will
make up the primary keys. If you call it with a single scalar
value this is assumed to be the primary key for the table.</p>
<pre>
$creator-&gt;pk($field1, $field2, ...);</pre>
<p>
</p>
<h2><a name="ai">ai</a></h2>
<p>This specifies the auto increment column for the current table.
There can be only one auto increment column per table, it must
be a numeric type, it must be not null and it must be the
primary key. This limitation is checked when you call create.
If it is not a numeric column type you will get a fatal error
when you call create. If any of the other limitations fail
the creator class will correct.</p>
<p>
</p>
<h2><a name="index">index</a></h2>
<p><code>index</code> allows you to specify the name and the columns for you
table indexes.</p>
<p>There are two ways to call this method.</p>
<p>You can set up all your indexes at once by calling it with
hash reference like this:</p>
<pre>
$creator-&gt;index({
$index1 =&gt; [field1, field2],
$index2 =&gt; [field3, field4]
});</pre>
<p>The keys to this hash reference are the index names and
the values are an array reference containing the columns
that are part of the named index. The order for these
columns are maintained during the create.</p>
<p>You can also pass in one index at a time like this;</p>
<pre>
$creator-&gt;index($index_name, $col1, ..., $coln);</pre>
<p>The first argument is the name of the index and all the
rest are treated as columns that are part of this index.
Again the order of the columns are maintained.</p>
<p>
</p>
<h2><a name="unique">unique</a></h2>
<p>The <code>unique</code> method allows you to specify the unique
indexes for the current table. This method takes the
same arguments as the <code>index</code> method.</p>
<p>
</p>
<h2><a name="fk">fk</a></h2>
<p><code>fk</code> allows you to specify foreign key relations for your
tables. You CAN NOT specify foreign keys for tables that
have not been created yet. There are two ways to pass in
arguments to <code>fk</code>. The first way is passing in a hash reference.</p>
<pre>
$creator-&gt;fk({
$FOREIGN_TABLE_NAME =&gt;
{
$LOCAL_TABLE_COL_1 =&gt; $FOREIGN_TABLE_COL_1,
...
$LOCAL_TABLE_COL_n =&gt; $FOREIGN_TABLE_COL_n
}
});</pre>
<p>The keys to the hash are the names of the tables you are relating to.
The values are a hash reference that contain the name of the current
tables columns as the keys and the name of the foreign tables columns
that we are relating to as the values.</p>
<p>You cannot relate fields to your self. You also need to be careful
not to create circular references. This is checked when you call this
method. If there is a circular reference detected you will receive a
fatal error.</p>
<p>Foreign keys currently effect selects only.</p>
<p>
</p>
<h2><a name="search_driver">search_driver</a></h2>
<p>This affects how the weighted records are indexed. By default the
system will attempt to use best driver for the DBMS. However, if
you'd like to force the indexing system to an alternative type, such
as for MYSQL you can use this.</p>
<p>* note: though the MYSQL driver is faster, the internal indexing system
has better support for phrase searching and keyword searching.</p>
<p>To set the driver, call <code>search_driver</code> with the appropriate driver
name. The following example will force the system into using the
internally implemented indexing scheme.</p>
<pre>
$creator-&gt;search_driver('INTERNAL');</pre>
<p>Currently, the only other valid option is ``MYSQL''.</p>
<p>-note-</p>
<p>The MYSQL driver occasionally behaves oddly with a small number of
records. In that case, set the search scheme to ``INTERNAL''.</p>
<p>
</p>
<h2><a name="create">create</a></h2>
<p>This is the method you call to create your table after you have specified
all your table definitions. Several checks are made when this method is
called to ensure the table is created correctly.</p>
<p>One of the things that is done is checking to see that the table you are
trying to create does not exist. If the table does exist <em>create</em> will
return undefined and set the error in $GT::SQL::error.</p>
<p>You can specify to have <code>create</code> drop the table by passing in ``force''.</p>
<pre>
$creator-&gt;create('force');</pre>
<p>-or-</p>
<pre>
$creator-&gt;create;</pre>
<p><code>create</code> returns true on success and undef on failure.</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Creator.pm,v 1.74 2004/09/22 02:43:29 jagerman Exp $</p>
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Display/HTML.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,289 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Display/HTML/Relation.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
<p># Options for display forms/views:
# hide_timestamp =&gt; 1 # Do not display timestamp fields.
# search_opts =&gt; 1 # Add search options boxes.
# multiple =&gt; 1 # Prepend $multiple- to column names.
# defaults =&gt; 1 # Use .def defaults.
# values =&gt; {} # hash ref of values to use (overrides input)
# table =&gt; 'string' # table properties, defaults to 0 border.
# tr =&gt; 'string' # table row properties, defaults to none.
# td =&gt; 'string' # table cell properties, defaults to just aligns.
# extra_table =&gt; 0 # disable wrap form in extra table for looks.
# col_font =&gt; 'string' # font to use for columns, defaults to $FONT.
# val_font =&gt; 'string' # font to use for values, defaults to $FONT.
# hide =&gt; [] # display fields as hidden tags.
# view =&gt; [] # display fields as html with hidden tags as well.
# skip =&gt; [] # don't display array of column names.
</p>
</body>
</html>

View File

@ -0,0 +1,287 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Display/HTML/Table.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
<p># Options for display forms/views:
# hide_timestamp =&gt; 1 # Do not display timestamp fields.
# search_opts =&gt; 1 # Add search options boxes.
# multiple =&gt; 1 # Prepend $multiple- to column names.
# defaults =&gt; 1 # Use .def defaults.
# values =&gt; {} # hash ref of values to use (overrides input)
# table =&gt; 'string' # table properties, defaults to 0 border.
# tr =&gt; 'string' # table row properties, defaults to none.
# td =&gt; 'string' # table cell properties, defaults to just aligns.
# extra_table =&gt; 0 # disable wrap form in extra table for looks.
# col_font =&gt; 'string' # font to use for columns, defaults to $FONT.
# val_font =&gt; 'string' # font to use for values, defaults to $FONT.
# hide =&gt; [] # display fields as hidden tags.
# view =&gt; [] # display fields as html with hidden tags as well.
# skip =&gt; [] # don't display array of column names.</p>
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Driver.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Driver/MSSQL.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Driver/MYSQL.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Driver/ORACLE.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Driver/PG.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Driver/Types.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Driver/debug.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Driver/sth.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,494 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Editor - an interface to modify an SQL table.</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#add_col">add_col</a></li>
<li><a href="#drop_col">drop_col</a></li>
<li><a href="#alter_col">alter_col</a></li>
<li><a href="#add_unique">add_unique</a></li>
<li><a href="#drop_unique">drop_unique</a></li>
<li><a href="#add_index">add_index</a></li>
<li><a href="#drop_index">drop_index</a></li>
<li><a href="#add_pk">add_pk</a></li>
<li><a href="#drop_pk">drop_pk</a></li>
<li><a href="#add_fk">add_fk</a></li>
<li><a href="#drop_fk">drop_fk</a></li>
<li><a href="#drop_table">drop_table</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Editor - an interface to modify an SQL table.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
my $editor = $DB-&gt;editor('Table');
$editor-&gt;add_col(Foo =&gt; { size =&gt; 20, type =&gt; 'int' });
$editor-&gt;export_data('/tmp/foo.txt');</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::SQL::Editor is an easy way to do a lot of table maintenance
functions like:</p>
<p>* Adding columns
* Dropping columns
* Changing columns
* Altering keys
* Importing data
* Dropping data</p>
<p>To get an editor object, you simply call <code>editor</code> from a
GT::SQL object, and specify the tablename you want to edit:</p>
<pre>
$editor = $db-&gt;editor('TableName');</pre>
<p>Note: You can not use Editor with relations, only tables.</p>
<p>
</p>
<h2><a name="add_col">add_col</a></h2>
<p>This method allows you to add a column to the current table.
All attributes for the column are passed in a single hash.</p>
<pre>
$editor-&gt;add_col($col_name,
{
size =&gt; 20,
type =&gt; 'int',
view_size =&gt; 20,
nice_name =&gt; &quot;my col&quot;,
regex =&gt; 'myregex'
}
);</pre>
<p>The same rules apply to this method that apply when you
define a column for creating a table. You must specify the
type.</p>
<p>
</p>
<h2><a name="drop_col">drop_col</a></h2>
<p>This method drops a column from the current table. Checks
are made to ensure the column is not linked to by a foreign
key relation.</p>
<pre>
$editor-&gt;drop_col($col_name);</pre>
<p>-or-</p>
<pre>
$editor-&gt;drop_col($col_name, &quot;remove&quot;);</pre>
<p>If you just specify the column name <code>drop_col</code> will check if
the column is referenced in a foreign key relation. If it
is <code>drop_col</code> will return undef and set the error message in
$GT::SQL::error. If it is not the column will be dropped.</p>
<p>If you specify ``remove'' <code>drop_col</code> will remove all foreign
key relations that point to the specified column.</p>
<p>If the specified column is itself a foreign key relation, the relation will be
dropped.</p>
<p>
</p>
<h2><a name="alter_col">alter_col</a></h2>
<p>This allows you to make changes to a columns type, null status,
etc..</p>
<pre>
$editor-&gt;alter_col($column_name,
{
size =&gt; 20,
type =&gt; 'int'
});</pre>
<p>The first argument is the column name the second is the definitions.
The column definitions are exactly the same as the column
definitions from the create. The type must be specified.</p>
<p>You can not add attributes to the column in this way.
You must specify the original definitions along with the
changes you need to make.</p>
<p>
</p>
<h2><a name="add_unique">add_unique</a></h2>
<p>This allows you to add a unique index to the current table.
If the name of the unique index is the same as another
index you <code>add_unique</code> will return undef and set the error
in $GT::SQL::error.</p>
<pre>
$editor-&gt;add_unique($index_name =&gt; [ $field1, $field2 .. ]);</pre>
<p>The name of the new index is the first argument. The second argument
is an array reference containing the columns that will be indexed.
The order of the columns are maintained for the unique index.
If you specify an index that has data in it that is not unique
(yes we do a select on the database) <code>add_unique</code> will return
an error and set the error in $GT::SQL::error.</p>
<p>
</p>
<h2><a name="drop_unique">drop_unique</a></h2>
<p>This method allows you to drop a unique index for the current
table. If the unique index does not exist <code>drop_unique</code> will
return undef and set the error in $GT::SQL::error. <code>drop_unique</code>
will also check to make sure dropping the unique index will not
cause problems for the database structure. If dropping the unique
index will cause a problem <code>drop_unique</code> will return undef and set
the error in $GT::SQL::error.</p>
<pre>
$editor-&gt;drop_unique($index_name);</pre>
<p>$index_name should be the name of the unique index to drop.</p>
<p>
</p>
<h2><a name="add_index">add_index</a></h2>
<p>This takes the same arguments as <code>add_unique</code> and return the same thing.
The only difference is <code>add_index</code> has no reason to check the content of
the current table because indexes are not unique. unique indexes are :)</p>
<pre>
$editor-&gt;add_index($index_name =&gt; [ $field1, $field2 .. ]);</pre>
<p>
</p>
<h2><a name="drop_index">drop_index</a></h2>
<p>This method drops the specified index from the current table.
<code>drop_index</code> will check to make sure no problems are caused from
dropping the index. If there are <code>drop_index</code> will return undef
and set the error in $GT::SQL::error.</p>
<pre>
$editor-&gt;drop_index($index_name);</pre>
<p>$index_name should be the name of the index to drop.</p>
<p>
</p>
<h2><a name="add_pk">add_pk</a></h2>
<p>This method allows you to add a primary key to the current
database.</p>
<pre>
$editor-&gt;add_pk($field1, $field2, ...);</pre>
<p>If there is already a primary key in the database <code>add_pk</code>
will drop the key and add the this new one. The table
will be check to make sure this change does not create problems
for the table. I problem is auto increment not being the primary
key anymore. If there is a problem this function returns undef
and stores the error in $GT::SQL::error.</p>
<p>
</p>
<h2><a name="drop_pk">drop_pk</a></h2>
<p>This method drops the current primary key. If there is no primary
key to drop it returns undef and sets the error in $GT::SQL::error.</p>
<pre>
$editor-&gt;drop_pk;</pre>
<p>If dropping the primary key will cause problems for the database
this method will return undef and set the error in $GT::SQL::error.</p>
<p>
</p>
<h2><a name="add_fk">add_fk</a></h2>
<p>This method allows you to add foreign key relations to the current
table.</p>
<pre>
$editor-&gt;add_fk($RELATION_NAME, { $SOURCE_FIELD_1 =&gt; $TARGET_FIELD });</pre>
<p>You can not link your foreign key to tables that do not exist. Also the
columns types and lengths for the two columns must be the same.
Circularity is not allowed either. That is a set of foreign keys can not
end up pointing back at the same table they started at. All of these things
are checked when this is added. If anything does not match this method returns
undef and sets the error in $GT::SQL::error.</p>
<p>
</p>
<h2><a name="drop_fk">drop_fk</a></h2>
<p>This method drops the specified foreign key relation.</p>
<pre>
$editor-&gt;drop_fk($table);</pre>
<p>$table should be the name of the foreign table the foreign
key points to.</p>
<p>
</p>
<h2><a name="drop_table">drop_table</a></h2>
<p>This method drops the current table. If there are any foreign keys
pointing to this table this method will fail and return undef. The error
will be set in $GT::SQL::error.</p>
<pre>
$editor-&gt;drop_table;</pre>
<p>-or-</p>
<pre>
$editor-&gt;drop_table(&quot;remove&quot;);</pre>
<p>If the first argument to this method is remove it will remove all
the foreign key relations that point to this table.</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Editor.pm,v 1.76 2005/04/27 22:53:24 brewt Exp $</p>
</body>
</html>

View File

@ -0,0 +1,404 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::File - adds file upload and download abilities to GT::SQL</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#creating_a_new_file_column">Creating a new FILE Column</a></li>
<li><a href="#inserting_into_the_column">Inserting into the Column</a></li>
<li><a href="#retreiving_from_column">Retreiving from Column</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::File - adds file upload and download abilities to GT::SQL</p>
<p>GT::SQL::File::Fh - basic file object</p>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::SQL::File is not created directly by the user. This module is an
internal module for GT::SQL to provide the abilty to upload/download
files into a database column (or so it seems).</p>
<p>GT::SQL::File::Fh is often accessed by the user as well as created
by the user whenever the user wants to store a file in the database.</p>
<p>
</p>
<h2><a name="creating_a_new_file_column">Creating a new FILE Column</a></h2>
<p>When a new table is created or a column is converted into 'FILE'
type, two things are created. First a column of type text which will
save the name of the file that is being stored. Secondly, a
piggy-back table will be greated under the name
``parent_table_name_File''. This new table will store the location of
the uploaded/stored file and various associated file attributes.</p>
<p>To create a new file table, include a column something like the
following.</p>
<pre>
File_Col_Name =&gt; {</pre>
<pre>
# common parameters
pos =&gt; 2,
type =&gt; 'FILE',</pre>
<pre>
# location of the directory where
# all the files should be saved
file_save_in =&gt; '/tmp',</pre>
<pre>
# the method all the files are saved
# 'hashed', or 'simple'
#
# Defaults to hashed, and stores files in:
# file_save_in/hashed_letter/ID
# Simple stores files in:
# file_save_in/ID_OwnName.OwnExt
file_save_scheme =&gt; 'hashed',
} ...</pre>
<p>
</p>
<h2><a name="inserting_into_the_column">Inserting into the Column</a></h2>
<p>Once you have the table created, to insert:</p>
<pre>
# Include all the modules
use GT::SQL;
use GT::SQL::File;
# First create a file object pointing to the file
$f = GT::SQL::File-&gt;open('/path/to/file.txt');
# Then create a table object
$DB = GT::SQL-&gt;new('path/to/defs');
$tbl = $DB-&gt;table();
# Create the record
# the file field can also be GT::CGI::Fh type
$rec = {
File_Column =&gt; $f,
# ... and all the other columns
};</pre>
<p># optionally, if you know the path to the file, you can provide
# a scalar ref of the path and the module will autoload
# the values
# simple scalar values will be dropped
$rec = {
File_Column =&gt; \``/path/to/file.txt''
# ... and all the other columns
};
</p>
<pre>
# Then to store the file
$id = $tbl-&gt;add( $rec );</pre>
<p>
</p>
<h2><a name="retreiving_from_column">Retreiving from Column</a></h2>
<p>When a file has been stored. A standard select will only return
the name of the file.</p>
<p>To get a filehandle, taking the previous example, if we know the
unique id, you can do the following.</p>
<pre>
$fh = $tbl-&gt;file_info( 'File_Column', $id );</pre>
<p>You can use this file handle just like any other, however hidden
behind are special functions that can be used as follows:</p>
<pre>
print &quot;Content-type: &quot;, $fh-&gt;File_MimeType(), &quot;\n\n&quot;;
print &lt;$fh&gt;;</pre>
<p>The following is a partial list of special functions you may access.</p>
<pre>
Method Returns
------ -------
File_Name the basic filename
File_Directory path to the file
File_MimeType mimetype of the file
File_Size site of the file
File_RelativePath the permuted file and directory without root
File_URL if possible, the URL to the requested file</pre>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: File.pm,v 1.60 2004/08/28 03:53:43 jagerman Exp $</p>
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Monitor.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,601 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Relation - manage multiple table joins</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#how_it_works">How it works</a></li>
<li><a href="#select_statements">SELECT statements</a></li>
<li><a href="#select_options">SELECT options</a></li>
<li><a href="#listing_the_relation_columns">Listing the relation columns</a></li>
<li><a href="#relation_primary_key">Relation primary key</a></li>
<li><a href="#foreign_keys_management">Foreign keys management</a></li>
<li><a href="#inserting_data">Inserting data</a></li>
<li><a href="#deleting_data">Deleting data</a></li>
<li><a href="#updating_records">Updating records</a></li>
<li><a href="#selecting_records">Selecting Records</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Relation - manage multiple table joins</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
my $relation = $DB-&gt;table('Company', 'Employees');
my $sth = $relation-&gt;select( {
Company.Name =&gt; 'Gossamer Threads',
Employees.Name =&gt; 'Alex Krohn'
}, ['Employees.Salary', 'Company.City'] );
my ($salary, $city) = $sth-&gt;fetchrow_array;
print &quot;Alex works in $city and earns $salary!\n&quot;;</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>This module aims at emulating a set of tables that are related to each other
via the use of foreign keys just as if it was one big table.</p>
<p>The module interface should be as compatible as possible with GT::SQL::Table,
thus you should be familiar with GT::SQL::Table before even reading this.</p>
<p>This documentation explains the differences between GT::SQL::Relation and
GT::SQL::Table and how the module internally works as well.</p>
<p>
</p>
<h2><a name="how_it_works">How it works</a></h2>
<p>GT::SQL supports the concept of foreign keys (also known as external
references). Basically, two tables that are linked together using external
references can look like that:</p>
<pre>
.-------------. .---------.
| EMPLOYEE | | COMPANY |
`-------------' `---------'
| ID | .---&gt;ID |
| COMPANY_ID ----' | NAME |
| NAME | `---------'
| SALARY |
`-------------'</pre>
<p>In this example, the COMPANY_ID attribute relates the fact that a an EMPLOYEE
belongs to such or such COMPANY.</p>
<p>Utilizing a Relation object can make these tables look like that:</p>
<pre>
.----------------------.
| EMPLOYEE-COMPANY |
`----------------------'
| EMPLOYEE.ID |
| EMPLOYEE.COMPANY_ID |
| EMPLOYEE.NAME |
| EMPLOYEE.SALARY |
| COMPANY.NAME |
`----------------------'</pre>
<p>The first thing that can be seen from there is that COMPANY.ID has disappeared
from this ``Virtual'' table.</p>
<p>Indeed, as for a given ``joined'' record this value must be the same in both
tables, representing the values twice would have been a useless source of
confusion.</p>
<p>
</p>
<h2><a name="select_statements">SELECT statements</a></h2>
<p>Selecting from a Relation object is pretty simple using the GT::SQL module. As
the interface is (almost) the same as <a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Table.html">the GT::SQL::Table manpage</a>, the GT::SQL wrapper
returns Table or Relation objects depending on the arguments that are passed to
table.</p>
<pre>
# This gives me a GT::SQL::Table object for
# the EMPLOYEE table.
my $emp = $sql-&gt;table('EMPLOYEE');</pre>
<pre>
# This gives me a GT::SQL::Relation object for
# the relation EMPLOYEE-COMPANY tables
my $emp_cmp = $sql-&gt;table('EMPLOYEE','COMPANY');</pre>
<p>From there, performing a select is pretty simple:</p>
<pre>
# select all the people from a real cool company
my $sth = $emp_cmp-&gt;select( { COMPANY.NAME =&gt; &quot;Gossamer Threads&quot; } )</pre>
<p>Internally, the generated SQL query would look like:</p>
<pre>
SELECT EMPLOYEE.ID, EMPLOYEE.COMPANY_ID, EMPLOYEE.NAME
EMPLOYEE.SALARY, COMPANY.NAME
FROM EMPLOYEE, COMPANY
WHERE COMPANY.NAME = 'Gossamer Threads' AND
EMPLOYEE.COMPANY_ID = COMPANY.ID</pre>
<p>Note that the join condition is computed and automatically appended at the end
of the query, so you do not have to worry about this.</p>
<p>
</p>
<h2><a name="select_options">SELECT options</a></h2>
<p>The select options for relation are similar to that of table, you have
<code>select_options()</code> which will be set for the next query done. Example:</p>
<pre>
$relation-&gt;select_options(&quot;LIMIT 10&quot;);</pre>
<p>This would append 'LIMIT 10' to your next select query. Another useful thing
is join_on(). <code>join_on()</code> allows you to specify the FK relation for the nextr
select. This overrides what is in the def files. It is useful for allowing you
to have one table which will be join differently depending on what you are
doing. The argument to this are the same as to fk().
Example:</p>
<pre>
$relation-&gt;join_on( remote_table =&gt; { local_column =&gt; remote_column } );</pre>
<p>The FK relation will be changed to this the next time you call <code>select()</code> but
then it will be cleared.</p>
<p>
</p>
<h2><a name="listing_the_relation_columns">Listing the relation columns</a></h2>
<p>* As previously said, the <code>cols()</code> method when invoked on a GT::SQL::Relation
object does not return all the columns, removing the duplicate external
references. So, how does it decides which column to keep and which one to
return?</p>
<p>In the EMPLOYEE-COMPANY example we have the constraint
EMPLOYEE.COMPANY_ID =&gt; COMPANY.ID and it keeps COMPANY_ID, i.e. the foreign key
instead of the key itself.</p>
<p>
</p>
<h2><a name="relation_primary_key">Relation primary key</a></h2>
<p>* The <code>pk()</code> method has to return the table primary key. The property of a primary
key is that it is a non-null unique record identifier. When <code>pk()</code> is invoked on
a Relation object, this base definition is applied to construct the object
primary key.</p>
<p>To find a unique set of fields that makes a good primary key for a Relation
object, the following, simple algorithm is used:</p>
<pre>
. .
. for each table .
. if the table is not referenced by another table that .
. is in the current relation .
. do .
. append the current table's primary key fields to .
. the Relation primary key fields .
. end-do .
. end-if .
. end-for .
. .</pre>
<p>This algorithm selects all the tables that represent the ``many'' in one-to-many
relations, and for all these tables add a list of fields which ensure a record
uniqueness.</p>
<p>
</p>
<h2><a name="foreign_keys_management">Foreign keys management</a></h2>
<p>* When invoked on a GT::SQL::Table object, the <code>fk()</code> method returns a hash which
has the following general structure:</p>
<pre>
{
target_table_1 =&gt; {
source_col_1 =&gt; target_col_1,
source_col_2 =&gt; target_col_2
},
target_table_2 =&gt; {
source_col_1 =&gt; target_col_1
}
}</pre>
<p>The GT::SQL::Relation module returns a hash which has the same structure. The
only difference is that it does not returns the external references which are
managed internally.</p>
<p>This is done for two reasons: As one field is removed from a Relation table, it
would not have been very logical to return a structure that point to
non-existent fields.</p>
<p>Moreover, these internal references from the ``Relation'' point of view have
nothing to do with the external world and thus should not be shown.</p>
<p>(i.e. EMPLOYEE.COMPANY_ID |===&gt; COMPANY.ID would not count in our example)</p>
<p>
</p>
<h2><a name="inserting_data">Inserting data</a></h2>
<p>The interface for inserting data in a Relation is the same as the one that is
being used for Table. However, because rows are being inserted in a relation
one-to-many, things internally work a bit differently.</p>
<p>The Relation <code>insert()</code> method takes an optional argument, which can be
'complete' or 'abort' (default being complete).</p>
<p><code>insert()</code> splits the relation columns into separate records that can be inserted
in a single table. However, some of the records may exist already!</p>
<p>for example, if we perform:</p>
<pre>
$sql = shift; # our GT::SQL object
$rel = $sql-&gt;table(qw/EMPLOYEE COMPANY/);
$rel-&gt;insert({
'EMPLOYEE.NAME' =&gt; $your_name,
'EMPLOYEE.SALARY' =&gt; $big_buck,
'COMPANY.NAME' =&gt; &quot;Gossamer Threads&quot;
});</pre>
<p>Obviously the company ``Gossamer Threads'' already exists, but you were not in
the ``EMPLOYEE'' table. Thus, when 'complete' is specified (it is the default
option), the program will not complain if a record to insert already exists but
just warns and continue the insertion work.</p>
<p>In other words, Gossamer Threads exists already and it will not be inserted
twice, but the employee will still be inserted and will belong to this company.</p>
<p>On the other hand, if you specify ``abort'', then no data is inserted if a
record that has to be inserted would trigger an error in GT::SQL::Table.</p>
<p>This feature can be useful if you want to insert a relation record assuming
that none of the entities that you specify should exist.</p>
<p>
</p>
<h2><a name="deleting_data">Deleting data</a></h2>
<p>Deleting data from a Relation object works using the following pattern:</p>
<pre>
. .
. for each row that matches the delete condition .
. do .
. split the row in table-based records .
. for each table that contains foreing keys from the .
. current relation object .
. do .
. delete the record .
. end-do .
. .
. for each table that is being referenced by another .
. table in the current relation object .
. do .
. delete the record unless there exists .
. some &quot;referencing&quot; data. .
. end-do .
. .</pre>
<p>As I feel that this explanation is probably very confusing, let us see how it
works using our classical example (The salary column has been removed).</p>
<pre>
.-------------------------------------------------------------.
| EMPLOYEE.ID | COMPANY_ID | EMPLOYEE.NAME | COMPANY.NAME |
`-------------------------------------------------------------'
| 1 | 1 | Alex | Gossamer Threads |
|-------------|------------|---------------|------------------|
| 2 | 1 | Scott | Gossamer Threads |
|-------------|------------|---------------|------------------|
| 3 | 1 | Aki | Gossamer Threads |
`-------------------------------------------------------------'</pre>
<p>Now let us say that we do the following:</p>
<pre>
# remove all the crazy geeks
$relation-&gt;delete({ 'EMPLOYEE.NAME' =&gt; 'Scott' });</pre>
<p>This will remove ``Scott'' from the EMPLOYEE table, but of course
Gossamer Threads will not be deleted because there still exists Alex and Aki
that would reference it.</p>
<p>Now if we do:</p>
<pre>
$relation-&gt;delete({ 'COMPANY.NAME' =&gt; 'Gossamer Threads' });</pre>
<p>or even</p>
<pre>
my $condition = new GT::SQL::Condition;
$condition-&gt;add(qw/EMPLOYEE.NAME LIKE %/);
$relation-&gt;delete($condition);</pre>
<p>Then we have generated a condition that matches all the employees, this means
that when the last record will be deleted, then the company Gossamer Threads
will have no more employees and therefore will be deleted.</p>
<p>(Yeah, well, this is for the purpose of this example, of course this will never
happen in real life :) )</p>
<p>
</p>
<h2><a name="updating_records">Updating records</a></h2>
<p>Currently, there exists a limitation on updating records in a Relation, which
is that only the records that represent the ``many'' part of the Relation are
updated.</p>
<p>The way it proceeds to perform the update is pretty simple:</p>
<pre>
. .
. for each row that matches the update condition .
. do .
. split the row in table-based records .
. for each table that contains foreing keys from the .
. current relation object .
. do .
. update the record .
. end-do .
. .</pre>
<p>That means that this will work:</p>
<pre>
# SALARY being a property of EMPLOYEE, it will be updated
# because EMPLOYEE references COMPANY and therefore is a
# &quot;many&quot;
$relation-&gt;update({ SALARY =&gt; $big_bill },
{ 'COMPANY.NAME' =&gt; 'Gossamer Threads' });</pre>
<pre>
# nope, you cannot use Relation to update the COMPANY table that
# way, this will not do anything.
$relation-&gt;update({ 'COMPANY.NAME' =&gt; 'New_Name' },
{ 'COMPANY.NAME' =&gt; 'Gossamer Threads' });</pre>
<p>Who would like to change such a great name anyway ?</p>
<p>
</p>
<h2><a name="selecting_records">Selecting Records</a></h2>
<p>Select behaves exactly like <a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Table.html">the GT::SQL::Table manpage</a> select. The only difference is
the ability to specify LEFT JOINs. For instance, if you want to see a list of
Employees who don't belong to a company, you can do:</p>
<pre>
my $relation = $DB-&gt;table('Employees', 'Company');
my $cond = GT::SQL::Condition-&gt;new('Company.ID', 'IS', \'NULL');
my $sth = $relation-&gt;select('left_join', $cond);</pre>
<p>The order of tables specified in the relation constructor is important!</p>
<p>In selecting columns, calling functions utilizing fully qualified column names
will cause GT::SQL::Relation to fail. Simply turn the values into references
like below.</p>
<pre>
my $sth = $relation-&gt;select(&quot;MIN(Company.ID)&quot;); # will fail</pre>
<pre>
my $sth = $relation-&gt;select(\&quot;MIN(Company.ID)&quot;); # will work</pre>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Relation.pm,v 1.102 2004/08/28 03:53:43 jagerman Exp $</p>
</body>
</html>

View File

@ -0,0 +1,791 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Search - internal driver for searching</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#drivers">Drivers</a></li>
<li><a href="#structure_of_an_indexing_driver">Structure of an Indexing Driver</a></li>
<li><a href="#structure_of_indexing_driver">Structure of Indexing Driver</a></li>
<li><a href="#structure_of_a_search_driver">Structure of a Search Driver</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Search - internal driver for searching</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<p>This implements the query string based searching scheme for GT::SQL. Driver
based, it is designed to take advantage of the different indexing schemes
available on different database engines.</p>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>Instead of describing how Search.pm is interfaced* this will describe how a
driver should be structured and how a new driver can be implemented.</p>
<p>* as it is never accessed directly by the programmer as it was designed to be
called through the functions GT::SQL::Table::query and GT::SQL::Table::query_sth</p>
<p>
</p>
<h2><a name="drivers">Drivers</a></h2>
<p>A driver has two parts. The Indexer and the Search packages are the most
important. Howserver, for any driver in the search, there must exist a directory
with the name of the driver in ALL CAPS. For exampel, MYSQL for MySQL, POSTGRES
for Postgres. Within each driver directory, The Indexer and Search portions of
the driver contains all the information required for initializing the database
table and searching the database.</p>
<p>The Indexing package of the driver handles all the data that is manipulated in
the database and also the initializes and the database for indexing.</p>
<p>The Search package handles the queries and retrieves results for the eventual
consumption by the calling program.</p>
<p>Drivers are simply subclasses of the base driver module, GT::SQL::Search::Base
and operate by overriding certain key functions.</p>
<p>The next few sections will cover how to create a search driver, and assumes a
fair bit of familiarity with GT::SQL.</p>
<p>
</p>
<h2><a name="structure_of_an_indexing_driver">Structure of an Indexing Driver</a></h2>
<p>The following is an absolutely simple skeleton driver that does nothing and but
called ``CUSTOM''. Found in the CUSTOM directory, this is the search package, and
would be call Search.pm in the GT/SQL/Search/CUSTOM library directory.</p>
<pre>
package GT::SQL::Search::CUSTOM::Search;
#------------------------------------------
use strict;
use vars qw/ @ISA /;
use GT::SQL::Search::Base::Search;
@ISA = qw( GT::SQL::Search::Base::Search );
sub load { my $package_name = shift; return GT::SQL::Search::CUSTOM::Search-&gt;new(@_) };
# overrides would go here
1;</pre>
<p>For the indexer, another file, Indexer.pm would be found in the
GT/SQL/Search/CUSTOM directory.</p>
<pre>
package GT::SQL::Search::CUSTOM::Indexer;
#------------------------------------------
use strict;
use vars qw/ @ISA /;
use GT::SQL::Search::Base;
@ISA = qw/ GT::SQL::Search::Base::Indexer /;
sub load { my $package_name = shift; return GT::SQL::Search::CUSTOM::Indexer-&gt;new(@_) };
# overrides would go here
1;</pre>
<p>The almost empty subs that immediately return with a value are functions that
can be overridden to do special tasks. More will be detailed later.</p>
<p>The Driver has been split into two packages. The original package name,
GT::SQL::Search::Nothing, houses the Search package.
GT::SQL::Search::Nothing::Indexer is the Indexing portion of the seach system.
``::Indexer'' must be appended to the orginial search name for the indexer.</p>
<p>Each of the override functions are triggered at points just before and after a
major event occurs in GT::SQL. Depending on the type of actions you require, you
pick and chose which events you'd like your driver to attach to.</p>
<p>
</p>
<h2><a name="structure_of_indexing_driver">Structure of Indexing Driver</a></h2>
<p>The Indexer is responsible for creating all the indexes, maintaining them and
when the table is dropped, removing all the associated indexes.</p>
<p>The following header must be defined for the Indexer.
GT::SQL::Search::Base::Indexer is the superclass that our driver inherits from.</p>
<pre>
package GT::SQL::Search::CUSTOM::Indexer;
#------------------------------------------
use strict;
use vars qw/ @ISA /;
use GT::Base;
use GT::SQL::Search::Base::Indexer;
@ISA = qw/ GT::SQL::Search::Base::Indexer /;</pre>
<p>In addition to the header, the following function must be defined.
GT::SQL::Search::Driver::Indexer::load creates the new object and allows for
special preinitialization that must occur. You can also create another driver
silently (such as defaulting to INTERNAL after a version check fails).</p>
<pre>
sub load { my $package_name = shift; return GT::SQL::Search::CUSTOM::Indexer-&gt;new(@_) };</pre>
<p>Finally, there are the overrides. None of the override functions need be defined
in your driver. Any calls made to undefined methods will silently fallback to
the superclass driver's methods. When a method has been overridden, the function
must return a true value when it is successful, otherwise the action will fail
and an error generated.</p>
<p>Whenever a object is created it will receive one property $self-&gt;{table} which
is the table that is being worked upon. This property is available in all the
method calls and is required for methods such as _create_table and
_drop_search_driver methods.</p>
<p>When a table is first created or when a table is destroyed the following two
functions are called. They are not passed any special values, however, these are
all class methods and $self-&gt;{table} will be a reference to the current table in
use.</p>
<p>This set of overrides are used by GT::SQL::Creator when the ::create method is
called. They are called just prior and then after the create table sql query has
been executed.</p>
<dl>
<dt><strong><a name="item_pre_create_table">pre_create_table</a></strong><br />
</dt>
<dt><strong><a name="item_post_create_table">post_create_table</a></strong><br />
</dt>
<dd>
These functions receive no special parameters. They will receive the data to the
table in the $self-&gt;{table} property.
</dd>
<p></p></dl>
<p>This next set of functions take place in GT::SQL::Editor.</p>
<dl>
<dt><strong><a name="item_drop_search_driver">drop_search_driver</a></strong><br />
</dt>
<dd>
This method receives no special parameters but is responsible for removing all
indexes and ``things'' associated with the indexing schema.
</dd>
<p></p>
<dt><strong><a name="item_add_search_driver">add_search_driver</a></strong><br />
</dt>
<dd>
Receives no extra parameters. Creates all indexes and does all actions required
to initialize indexing scheme.
</dd>
<p></p>
<dt><strong><a name="item_pre_add_column">pre_add_column</a></strong><br />
</dt>
<dt><strong><a name="item_post_add_column">post_add_column</a></strong><br />
</dt>
<dd>
The previous two functions are called just before and after a new column is
added.
</dd>
<dd>
<p>pre_add_column accepts $name (of column), $col (hashref of column attributes).
The method will only be called if the column has a weight associated with it.
The function must return a non-zero value if successful. Note that the returned
value will be passed into the post_add_column so temporary values can be passed
through if required.</p>
</dd>
<dd>
<p>post_add_column accepts $name (of column), $col (hashref of column attributes),
$results (of pre_add_column). This method is called just after the column has
been inserted into the database.</p>
</dd>
<p></p>
<dt><strong><a name="item_pre_delete_column">pre_delete_column</a></strong><br />
</dt>
<dt><strong><a name="item_post_delete_column">post_delete_column</a></strong><br />
</dt>
<dd>
These previous functions are called just before and after the sql for a old
column is deleted. They must remove all objects and ``things'' associated with a
particular column's index.
</dd>
<dd>
<p>pre_delete_column accepts $name (of column), $col (hashref of column
attributes). The method will only be called if the column has a weight
associated with it. The function must return a non-zero value if successful.
Note that the returned value will be passed into the post_delete_column so
temporary values can be passed through if required.</p>
</dd>
<dd>
<p>post_delete_column accepts $name (of column), $col (hashref of column
attributes), $results (of pre_add_column). This method is called just after the
column has been dropped from the database.</p>
</dd>
<p></p>
<dt><strong><a name="item_pre_drop_table">pre_drop_table</a></strong><br />
</dt>
<dt><strong><a name="item_post_drop_table">post_drop_table</a></strong><br />
</dt>
<dd>
The two previous methods are used before and after the table is dropped. The
methods must remove any tables or ``things'' related to indexing from the table.
</dd>
<dd>
<p>pre_drop_table receives no arguments. It can find a copy of the current table
and columns associated in $self-&gt;{table}.</p>
</dd>
<dd>
<p>post_drop_table receives one argument, which is the result of the
pre_drop_table.</p>
</dd>
<p></p></dl>
<p>The following set of functions take place in GT::SQL::Table</p>
<dl>
<dt><strong><a name="item_pre_add_record">pre_add_record</a></strong><br />
</dt>
<dt><strong><a name="item_post_add_record">post_add_record</a></strong><br />
</dt>
<dd>
Called just before and after an insert occurs. These functions take the record
and indexes them as required.
</dd>
<dd>
<p>pre_add_record will receive one argument, $rec, hashref, which is the record
that will be inserted into the database. Table information can be found by
accessing $self-&gt;{table} Much like the other functions, on success the result
will be cached and fed into the post_add_record function.</p>
</dd>
<dd>
<p>post_add_record receives $rec, a hashref to describing the new result, the $sth
of the insert query, and the result of the pre_add_record method. The result
from $sth-&gt;insert_id if there is a ai field will be the new unique primary key.</p>
</dd>
<p></p>
<dt><strong><a name="item_pre_update_record">pre_update_record</a></strong><br />
</dt>
<dt><strong><a name="item_post_update_record">post_update_record</a></strong><br />
</dt>
<dd>
Intercepts the update request before and just after the sql query is executed.
This override has the potential of being rather messy. More than one record can
be modified in this action and the indexer must work a lot to ensure the
database is up to snuff.
</dd>
<dd>
<p>pre_update_record receives two parameters, $set_cond, $where_cond. $set_cond is
a hashref containing the new values that must be set, and $where_cond is a
GT::SQL::Condition object selecting records to update. The result once again, is
cached and if undef is considered an error.</p>
</dd>
<dd>
<p>post_update_record takes the same parameters as pre_update_record, except one
extra paremeter, the result of pre_update_record.</p>
</dd>
<p></p>
<dt><strong><a name="item_pre_delete_record">pre_delete_record</a></strong><br />
</dt>
<dt><strong><a name="item_post_delete_record">post_delete_record</a></strong><br />
</dt>
<dd>
Called just before and after the deletion request for records are called.
</dd>
<dd>
<p>pre_delete_record, has only one parameter, $where, a GT::SQL::Condition object
telling which records to delete. The results of this method are passed to
post_delete_record.</p>
</dd>
<dd>
<p>post_delete_record, has one addition parameter to pre_delete_record and like
most post_ methods, is the result of the pre_delete_record method.</p>
</dd>
<p></p>
<dt><strong><a name="item_pre_delete_all_records">pre_delete_all_records</a></strong><br />
</dt>
<dt><strong><a name="item_post_delete_all_records">post_delete_all_records</a></strong><br />
</dt>
<dd>
These two functions are quite simple, but they are different from drop search
driver in that though the records are all dropped, the framework for all the
indexing is not dropped as well.
</dd>
<dd>
<p>Neither function is passed any special data, except for post_delete_all_records
which receives the rsults of the pre_delete_all_records method.</p>
</dd>
<p></p>
<dt><strong><a name="item_reindex_all">reindex_all</a></strong><br />
</dt>
<dd>
This function is sometimes called by the user to refresh the index. The
motivation for this, in the case of the INTERNAL driver, is sometimes due to
outside manipulation of the database tables, the index can become
non-representative of the data in the tables. This method is to force the
indexing system to fix errors that have passed.
</dd>
<p></p>
<dt><strong><a name="item_ok">ok</a></strong><br />
</dt>
<dd>
This function is called by GT::SQL::Search as a package method,
GT::SQL::Search::EXAMPLE::Indexer-&gt;ok( $table ); and is passed a table object
reference. What this function must do is to return a true or false value that
tells the search system if this driver can be used. The MYSQL driver has a good
example for this, it tests to ensure that the mysql database system version is
at least 3.23.23.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="structure_of_a_search_driver">Structure of a Search Driver</a></h2>
<p>The Searcher is responsible for only one thing, to return results from a query
search. You can override the parser, however, subclassing the following methods
will have full parsing for all things such as +/-, string parsing and substring
matching.</p>
<p>The structures passed into the methods get a little complicated so beware!</p>
<p>ALL the following functions receive two parameters, the first is a search
parameters detailing the words/phrases to search for, the second parameter is
the current result set of IDs =&gt; scores.</p>
<p>There are two types of search parameters, one for words and the other for
phrases. The structure is a little messy so I'll detail them here.</p>
<p>For words, the structure is like the following:</p>
<pre>
$word_search = {
'word' =&gt; {
substring =&gt; '1', # set to 1 if this is substring match
phrase =&gt; 0, # not a phrase
keyword =&gt; 1, # is a keyword
mode =&gt; '', # can also be must, cannot to mean +/-
},
'word2' =&gt; ...
}</pre>
<p>For phrases the structure will become:</p>
<pre>
$phrase_search =&gt; {
'phrase' =&gt; {
substring =&gt; undef # never required
phrase =&gt; [
'word1',
'word2',
'word3',
...
], # for searching by indiv word if required
keyword =&gt; 0, # not a keyword
mode =&gt; '' # can also be must, cannot
},
'phrase2' =&gt; ...
}</pre>
<p>Based on these structures, hopefully it will be easy enough to build whatever is
required to grab the appropriate records.</p>
<p>Finally, the second item passed in will be a hash filled with ID =&gt; score values
of search results. They look something like this:</p>
<pre>
$results = {
1 =&gt; 56,
2 =&gt; 31,
4 =&gt; 6
}</pre>
<p>It is important for all the methods to take the results and return the results,
as the result set will be daisychained down like a set to be operated on by
various searching schemes.</p>
<p>At the end of the query, the results in this set will be sorted and returned to
the user as an sth.</p>
<p>Operations on this set are preformed by the following five methods.</p>
<dl>
<dt><strong><a name="item__query">_query</a></strong><br />
</dt>
<dd>
This method is called just after all the query string has been parsed and put
into their proper buckets. This method is overridden by the INTERNAL driver to
decide it wants to switch to the NONINDEX driver for better performance.
</dd>
<dd>
<p>Two parameters are passed in, ( $input, $buckets ). $input is a hash that
contains all the form/cgi parameters passed to the $tbl-&gt;query function and
$buckets is s the structure that is created after the query string is parsed.
You may also call $self-&gt;SUPER::_query( $input, $buckets ) to pass the request
along normally.</p>
</dd>
<dd>
<p>You must return undef or an STH from this function.</p>
</dd>
<p></p>
<dt><strong><a name="item__union_query">_union_query</a></strong><br />
</dt>
<dd>
This method takes a $word_search and does a simple match query. If it finds
records with any of the words included, it will append the results to the list.
Passed in is the $results and it must return the altered results set.
</dd>
<dd>
<p>This method must also implement substring searching.</p>
</dd>
<p></p>
<dt><strong><a name="item__phrase_query">_phrase_query</a></strong><br />
</dt>
<dd>
Just like the union_query, however it searches based on phrases.
</dd>
<p></p>
<dt><strong><a name="item__phrase_intersect_query">_phrase_intersect_query</a></strong><br />
</dt>
<dd>
This takes a $phrase_search and a $result as parameters. This method must look
to find results that are found within the current result set that have the
passed phrases as well. However, if there are no results found, this method can
look for more results.
</dd>
<p></p>
<dt><strong><a name="item__intersect_query">_intersect_query</a></strong><br />
</dt>
<dd>
Takes two parameters, a $word_search, and $results. Just like the
_phrase_intersect query, if there are results already, tries to whittle away the
result set. If there are no results, tries to look for results that have all the
keywords in a record.
</dd>
<dd>
<p>This method must also implement substring searching.</p>
</dd>
<p></p>
<dt><strong><a name="item__disjoin_query">_disjoin_query</a></strong><br />
</dt>
<dd>
Takes two parameters, a $word_search, and $results. This will look through the
result set and remove all matches to any of the keywords.
</dd>
<dd>
<p>This method must also implement substring searching.</p>
</dd>
<p></p>
<dt><strong><a name="item__phrase_disjoin_query">_phrase_disjoin_query</a></strong><br />
</dt>
<dd>
Two parameters, $phrase_search and $results are passed to this method. This does
the exact same thing as _disjoin_query but it looks for phrases.
</dd>
<p></p>
<dt><strong><a name="item_query">query</a></strong><br />
</dt>
<dd>
If you choose to override this method, you will have full control of the query.
</dd>
<dd>
<p>This method accepts a $CGI or a $HASH object and performs the following</p>
</dd>
<dd>
<pre>
Options:
- paging
mh : max hits
nh : number hit (or page of hits)
sb : column to sort by (default is by score)</pre>
</dd>
<dd>
<pre>
- searching
ww : whole word
ma : 1 =&gt; OR match, 0 =&gt; AND match, undefined =&gt; QUERY
substring : search for substrings of words
bool : 'and' =&gt; and search, 'or' =&gt; or search, '' =&gt; regular query
query : the string of things to ask for</pre>
</dd>
<dd>
<pre>
- filtering
field_name : value # Find all rows with field_name = value
field_name : &quot;&gt;value&quot; # Find all rows with field_name &gt; value.
field_name : &quot;&lt;value&quot; # Find all rows with field_name &lt; value.
field_name-gt : value # Find all rows with field_name &gt; value.
field_name-lt : value # Find all rows with field_name &lt; value.</pre>
</dd>
<dd>
<p>The function must return a STH object. However, you may find useful the
GT::SQL::Search::STH object, which will automatically handle mh, nh, and
alternative sorting requests. All you will have to do is</p>
</dd>
<dd>
<pre>
sub query { ... your code ... return $self-&gt;sth( $results ); }</pre>
</dd>
<dd>
<p>Where results is a hashref containing primarykeyvalue =&gt; scorevalues.</p>
</dd>
<p></p>
<dt><strong><a name="item_alternate_driver_query">alternate_driver_query</a></strong><br />
</dt>
<dd>
There is no reason to override this method, however, if you would like to use
another driver's search instead of the current, this method will let you do so.
</dd>
<dd>
<p>Accepting 2 parameters, ( $drivername, $input ), where $drivername is the name
of the driver you'd like to use and $input is the parameters passed to the
method. Returned is an $sth value (undef if an error has occured). This method
was used in the INTERNAL driver to shunt to NONINDEXED if it found the search
would take too long.</p>
</dd>
<p></p></dl>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Search.pm,v 1.60 2004/08/28 03:53:43 jagerman Exp $</p>
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/Base/Common.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/Base/Indexer.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/Base/STH.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/Base/Search.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/INTERNAL/Indexer.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/INTERNAL/Search.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/MSSQL/Indexer.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/MSSQL/Search.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/MYSQL/Indexer.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/MYSQL/Search.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/MYSQL/VER3.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/MYSQL/VER4.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/NONINDEXED/Indexer.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Search/NONINDEXED/Search.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>

View File

@ -0,0 +1,830 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Table - a perl interface to manipulate a single SQL table.</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#query__query_sth">query, query_sth</a></li>
<li><a href="#select">select</a></li>
<li><a href="#select_options">select_options</a></li>
<li><a href="#count">count</a></li>
<li><a href="#hits">hits</a></li>
<li><a href="#get">get</a></li>
<li><a href="#add">add</a></li>
<li><a href="#insert">insert</a></li>
<li><a href="#insert_multiple">insert_multiple</a></li>
<li><a href="#modify">modify</a></li>
<li><a href="#update">update</a></li>
<li><a href="#delete">delete</a></li>
<li><a href="#delete_all">delete_all</a></li>
<li><a href="#table_properties">Table Properties</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Table - a perl interface to manipulate a single SQL table.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
my $sth = $table-&gt;select(Column3 =&gt; { Column =&gt; $value, Column2 =&gt; $value2 });
$table-&gt;delete({ Column =&gt; $value });
$table-&gt;insert({ Column1 =&gt; $val, Column2 =&gt; $value2 });
$table-&gt;update({ SetCol =&gt; $val }, { WhereCol =&gt; $val2 });</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::SQL::Table provides methods to add, modify, delete and search over a single
SQL table.</p>
<p>The following methods are provided.</p>
<p>
</p>
<h2><a name="query__query_sth">query, query_sth</a></h2>
<p><code>query</code> provides a simple and powerful method to search a table. It takes as
input either a hash, hash ref or CGI object making it especially useful
searching from web forms.</p>
<pre>
my $results = $db-&gt;query($in);</pre>
<p>The return of <code>query</code> is an arrayref of arrayrefs. <code>query_sth</code> returns an STH
that you can fetch rows from.</p>
<p>Typical usage to go through the results is:</p>
<pre>
my $results = $db-&gt;query({ Title =&gt; 'foobar' });
if ($results) {
for my $result (@$results) {
...
}
}</pre>
<p>To specify what to search, you simply pass in column =&gt; search value. However,
you can also pass in a lot of options to enhance your search:</p>
<p>Find all rows with field_name = value:</p>
<pre>
field_name =&gt; value</pre>
<p>Find all rows with field_name &gt; value:</p>
<pre>
field_name =&gt; &quot;&gt;value&quot;</pre>
<p>Find all rows with field_name &lt; value:</p>
<pre>
field_name =&gt; &quot;&lt;value&quot;</pre>
<p>Find all rows with field_name &gt; value:</p>
<pre>
field_name-gt =&gt; value</pre>
<p>Find all rows with field_name &lt; value:</p>
<pre>
field_name-lt =&gt; value</pre>
<p>Find all rows where any field_name = value:</p>
<pre>
keyword =&gt; value</pre>
<p>Find all rows using indexed search (see weights):</p>
<pre>
query =&gt; value</pre>
<p>Set to 1, use '=' comparison, 0/unspecified use 'LIKE '%val%' comparision:</p>
<pre>
ww =&gt; 1</pre>
<p>Search using LIKE for column 'Title' (valid opts are '=', '&gt;', '&lt;' or 'LIKE'):</p>
<pre>
Title-opt =&gt; 'LIKE'</pre>
<p>Set to 1, OR match results, 0/unspecified AND match results:</p>
<pre>
ma =&gt; 1</pre>
<p>Return a max of n results, defaults to 25:</p>
<pre>
mh =&gt; n</pre>
<p>Return page n of results:</p>
<pre>
nh =&gt; n</pre>
<p>Sort by 'Title' column:</p>
<pre>
sb =&gt; 'Title'</pre>
<p>Sort in ascending (ASC) or descending (DESC) order:</p>
<pre>
so =&gt; 'ASC'</pre>
<p>
</p>
<h2><a name="select">select</a></h2>
<p>Select provides a way to implement almost any sql SELECT statement.</p>
<p>An executed statement handle is returned that you can call the normal fetchrow,
fetchrow_array, fetchrow_hashref, etc on.</p>
<pre>
my $sth = $obj-&gt;select;</pre>
<p>is equivalant to ``SELECT * FROM Table''</p>
<pre>
my $sth = $obj-&gt;select({ Col =&gt; Val });</pre>
<p>is equivalant to ``SELECT * FROM Table WHERE Col = 'Val'''.</p>
<pre>
my $sth = $obj-&gt;select('Col2', 'Col3', { Col =&gt; &quot;Val&quot; });</pre>
<p>is equivalant to ``SELECT Col2,Col3 FROM Table WHERE Col =&gt; 'Val'''.</p>
<p>So you can pass in a hash reference which represents the where clause, and an
array reference where represents what you want to select on.</p>
<p>If you need more complex where clauses, you should use a condition object
instead of a hash reference. See <a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Condition.html">the GT::SQL::Condition manpage</a> for more information.</p>
<p>Notes:</p>
<dl>
<dt><strong><a name="item_quoting_in_where">quoting in where</a></strong><br />
</dt>
<dd>
All arguments in the where clause are automatically quoted. If you don't want
quotes, you should pass in a scalar reference as in:
</dd>
<dd>
<pre>
my $sth = $obj-&gt;select({ Col =&gt; \&quot;NOW()&quot; });</pre>
</dd>
<dd>
<p>which turns into ``SELECT * FROM Table WHERE Col = NOW()''.</p>
</dd>
<p></p>
<dt><strong><a name="item_quoting_in_select">quoting in select</a></strong><br />
</dt>
<dd>
Nothing in the select will be quoted, so to use functions, simply pass in what
you want:
</dd>
<dd>
<pre>
my $sth = $obj-&gt;select('COUNT(*)');</pre>
</dd>
<dd>
<p>which turns into ``SELECT <code>COUNT(*)</code> FROM Table''.</p>
</dd>
<p></p></dl>
<p>To specify LIMIT, or GROUP BY, or ORDER BY or other SELECT clauses that come
after the WHERE, you should use select_options below.</p>
<p>
</p>
<h2><a name="select_options">select_options</a></h2>
<p>This method provides a way for you to specify select options such as LIMIT and
SORT_BY.</p>
<pre>
$obj-&gt;select_options(@OPTIONS);</pre>
<p>@OPTIONS should be a list of options you want appended to your next select.</p>
<p>For example,</p>
<pre>
$obj-&gt;select_options('ORDER BY Foo', 'LIMIT 50');
$obj-&gt;select;</pre>
<p>would turn into ``SELECT * FROM Table ORDER BY Foo LIMIT 50''. To perform a
LIMIT with an OFFSET, you should specify something like:</p>
<pre>
$obj-&gt;select_options('LIMIT 25 OFFSET 75');</pre>
<p>You can alternatively use the equivelant MySQL-specific syntax:</p>
<pre>
$obj-&gt;select_options('LIMIT 75, 25');</pre>
<p>Both will be handled correctly regardless of the database type.</p>
<p>
</p>
<h2><a name="count">count</a></h2>
<p>This method will allow you to count records based on a where clause.</p>
<pre>
my $count = $obj-&gt;count($condition);</pre>
<p><code>count()</code> takes either a condition or a hash reference. If no argument is
provided, it is equivalant to ``SELECT <code>COUNT(*)</code> FROM Table'', or total number of
rows.</p>
<p>
</p>
<h2><a name="hits">hits</a></h2>
<p>This method returns the number of hits from that last select query <strong>without</strong>
the limit clause if there was one.</p>
<pre>
$hits = $obj-&gt;hits;</pre>
<p>For example, to get rows 20-30 of a query result, use:</p>
<pre>
$obj-&gt;select_options(&quot;LIMIT 10 OFFSET 20&quot;); $obj-&gt;select({ Column =&gt; 'Foo' });</pre>
<p>this translates into (in MySQL):</p>
<pre>
SELECT * FROM Table WHERE Column = 'Foo' LIMIT 20, 10</pre>
<p>To see the total number of results that the query would have retrieved without
any limit, you call:</p>
<pre>
$hits = $obj-&gt;hits;</pre>
<p>If the number of hits can be calculated, it will be returned to you without any
additional query. Otherwise, the following query will be performed
automatically, and the hit count returned to you:</p>
<pre>
SELECT COUNT(*) FROM Table WHERE Column = 'Foo'</pre>
<p><strong>NOTE</strong>: The <code>hits()</code> method _only_ applies to select queries. Most databases do
not provide enough information to get counts of rows affected for other types
of queries.</p>
<p>
</p>
<h2><a name="get">get</a></h2>
<p>This method allows for a simple interface to retrieving records from the
table(s).</p>
<pre>
my $rec_hash_ref = $obj-&gt;get($val);
my $rec_hash_ref = $obj-&gt;get($val, 'HASH', ['col1', 'col2']);
my $rec_array_ref = $obj-&gt;get($val, 'ARRAY');</pre>
<p>The first argument is the primary key value of the record you want to retrieve.</p>
<p>The second argument is a format option. It can be either 'ARRAY' or 'HASH' and
determines whether you are returned a HASH reference or an ARRAY reference. The
default is 'HASH', and it is optional.</p>
<p>The last argument is a list of column names you want retrieved. <code>get</code> defaults
to returning the entire record, but if you only need specific columns, you can
ask for the ones you want.</p>
<p>For example:</p>
<pre>
my $employee = $emp_db-&gt;get('Alex');</pre>
<p>would return a hash ref of the record whose primary key is equal to 'Alex'.</p>
<pre>
my $emp_addr = $emp_db-&gt;get('Alex', 'HASH', ['City', 'State', 'ZipCode']);</pre>
<p>would return a hash ref of only the three fields City, State, ZipCode for the
record whose primary key equals Alex.</p>
<p>
</p>
<h2><a name="add">add</a></h2>
<p>Method to add an entry into the database. This method can take it's arguments
one of three ways.</p>
<pre>
$obj-&gt;add($CGI_OBJECT);</pre>
<pre>
-or-</pre>
<pre>
$obj-&gt;add({
col1 =&gt; $val1,
col2 =&gt; $val2,
...
});</pre>
<pre>
-or-</pre>
<pre>
$obj-&gt;add(
col1 =&gt; $val1,
col2 =&gt; $val2,
...
);</pre>
<p>This method can take a cgi object, a hash reference or a hash. The keys of the
hash should be the names of the column and the values should be the values to
insert into the fields. The CGI Object is not different. If the table has an
auto_increment field, the value of the last inserted record will be returned.</p>
<p><code>add</code> returns undef on failure. If successful, and the table has an
auto-increment field, the auto increment value is returned. If there is no
auto increment value, then 1 is returned. Any errors will be in
$GT::SQL::error.</p>
<p>Passing in GT_SQL_SKIP_CHECK =&gt; 1 will have the table module skip any error
checking it should perform.</p>
<p>Passing in GT_SQL_SKIP_INDEX =&gt; 1 will not index the fields. You can also use
the <code>indexing</code> method to do this.</p>
<p>
</p>
<h2><a name="insert">insert</a></h2>
<p><code>insert</code> is a lower level add. The main differences between <code>add</code> and
<code>insert</code> are that add performs a not null check, and add returns the id of the
just inserted value.</p>
<p><code>insert</code> does not perform a not null check. Also, insert returns the statement
handle used to do the insert (so you can call $sth-&gt;insert_id to get the auto
increment).</p>
<p>
</p>
<h2><a name="insert_multiple">insert_multiple</a></h2>
<p><code>insert_multiple</code> will try to optimize the insertion of multiple rows with
simple values. Under MySQL, this uses MySQL's extended insert syntax:</p>
<pre>
INSERT INTO Table (col1, col2, col3)
VALUES ('val1', 'val2', 'val3'), ('val4', 'val5', 'val6'), ...</pre>
<p>On other databases, it attempts to perform all insertions in a single
transaction, which will also usually yield performance benefits. Note,
however, that <code>insert_multiple</code> should not be used for anything more complex
than basic column values - for example, inserting NULL to set the current date,
or using raw SQL by passing scalar references for values.</p>
<p>It takes at least two arguments - the first argument is an array ref of column
names, and the rest are array references of values. For example, to produce
the above example SQL code, you would call:</p>
<pre>
$table-&gt;insert_multiple(
['col1', 'col2', 'col3'],
['val1', 'val2', 'val3'],
['val4', 'val5', 'val6'],
...
);</pre>
<p>
</p>
<h2><a name="modify">modify</a></h2>
<p>This method is designed for modifying a single entry in the table. It takes as
input a hash, hash ref or CGI object, which is assumed to represent a single
row with all fields intact.</p>
<p><code>modify</code> will then look for the primary key in the input and set all fields
for that row equal to what was passed in.</p>
<p>You need to pass in a complete record! If you just want to update one column,
you probably want to use <code>update</code> instead, as doing:</p>
<pre>
my $result = $obj-&gt;modify(column1 =&gt; 'Foo');</pre>
<p>will blank out all the other fields and set just column1 to Foo.</p>
<p><code>modify</code> returns undef on failure, 1 on success. The error message will be
available in $GT::SQL::error.</p>
<p>
</p>
<h2><a name="update">update</a></h2>
<p>This method provides a more robust way to update multiple entries in the table.</p>
<pre>
my $result = $obj-&gt;update(
{
col1 =&gt; $val1,
col2 =&gt; $val2,
...
},
$condition
);</pre>
<pre>
-or-</pre>
<pre>
my $result = $obj-&gt;update(
{
col1 =&gt; $val1,
col2 =&gt; $val2,
...
},
{
col1 =&gt; $val1,
col2 =&gt; $val2,
...
}
);</pre>
<p>In both these cases the first argument is a hash reference with the column
names as the keys and the new values you want the columns to hold as the
values. The second argument can either be a condition object or a hash
reference. If it is a hash reference the keys will be used as the column names
and the values will be taken as the current column values for the where clause
to update the table.</p>
<pre>
$obj-&gt;update({ Setme =&gt; 'NewValue'}, { WhereCol =&gt; 5 });</pre>
<p>would set the column 'Setme' to 'NewValue' where the column 'WhereCol' is 5.
This translates to:</p>
<pre>
UPDATE Table SET SetMe='NewValue' WHERE WhereCol = 5</pre>
<p>If the second argument is a GT::SQL::Condition object the condition object will
be used to build the where clause with. Please see <a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Condition.html">the GT::SQL::Condition manpage</a> for a
description of what you can do with a where clause.</p>
<pre>
my $condition = GT::SQL::Condition-&gt;new('WhereCol', 'LIKE', 'Foo%');
$obj-&gt;update({ Setme =&gt; 'Newvalue' }, $condition);</pre>
<p>would translate to:</p>
<pre>
UPDATE Table SET Setme = 'Newvalue' WHERE WhereCol LIKE 'Foo%'</pre>
<p>The condition can now much more complex where clauses though.</p>
<p><code>update</code> returns undef on failure and the a <a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Driver.html">the GT::SQL::Driver manpage</a> statement
handle on success. The error message will be available in $GT::SQL::error.</p>
<p>Passing in GT_SQL_SKIP_CHECK =&gt; 1 as a third option to <code>update</code> will have the
table module skip any error checking it should perform.</p>
<p>Passing in GT_SQL_SKIP_INDEX =&gt; 1 will not index the fields. You can also use
the <code>indexing</code> method to do this.</p>
<p>
</p>
<h2><a name="delete">delete</a></h2>
<p>This method provides a robust interface to delete entries from your <code>table(s)</code>
using join and or foreign key relations.</p>
<pre>
my $result = $obj-&gt;delete($condition);</pre>
<p>You can pass into <code>delete</code> either a condition object to delete multiple
entries, or a scalar value to delete the row whose primary key equals the
value. If you have a multiple primary key, then you can pass in an array ref to
delete that row.</p>
<pre>
my $result = $obj-&gt;delete({
col1 =&gt; $val1,
col2 =&gt; $val2,
...
);</pre>
<pre>
-or-</pre>
<pre>
$obj-&gt;delete($val);</pre>
<pre>
-or-</pre>
<pre>
$obj-&gt;delete([$val1, $val2]);</pre>
<p><code>delete</code> returns undef on failure, 1 on success. The error message will be
available in $GT::SQL::error.</p>
<p>
</p>
<h2><a name="delete_all">delete_all</a></h2>
<p>This method takes no arguments and will erase all entries from a table.</p>
<p>
</p>
<h2><a name="table_properties">Table Properties</a></h2>
<p>Table provides a lot of methods to access information about the table:</p>
<dl>
<dt><strong><a name="item_name">name</a></strong><br />
</dt>
<dd>
Provides the name of the table minus any prefix.
</dd>
<p></p>
<dt><strong><a name="item_ai">ai</a></strong><br />
</dt>
<dd>
Returns the name of the auto-increment field if any.
</dd>
<p></p>
<dt><strong><a name="item_pk">pk</a></strong><br />
</dt>
<dd>
Returns an <code>array(ref)</code> of primary key column names.
</dd>
<p></p>
<dt><strong><a name="item_fk">fk</a></strong><br />
</dt>
<dd>
Returns a hash of foreign key values.
</dd>
<p></p>
<dt><strong><a name="item_fk_tables">fk_tables</a></strong><br />
</dt>
<dd>
Returns a list of tables with foreign keys pointing to this table.
</dd>
<p></p>
<dt><strong><a name="item_index">index</a></strong><br />
</dt>
<dd>
Returns a hash ref of index name =&gt; array ref of column names that index uses.
</dd>
<p></p>
<dt><strong><a name="item_unique">unique</a></strong><br />
</dt>
<dd>
Returns a hash ref of unique index names =&gt; array ref of column names that
unique index uses.
</dd>
<p></p>
<dt><strong><a name="item_all_indexes"><strong>all_indexes</strong></a></strong><br />
</dt>
<dd>
Returns the joined output of index and unique and primary key.
</dd>
<p></p>
<dt><strong><a name="item_cols">cols</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; column definition
</dd>
<p></p>
<dt><strong><a name="item_default">default</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; default value.
</dd>
<p></p>
<dt><strong><a name="item_size">size</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; size of column in SQL.
</dd>
<p></p>
<dt><strong><a name="item_type">type</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; type of column in SQL.
</dd>
<p></p>
<dt><strong><a name="item_form_display">form_display</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; name to display on auto generated forms
(think pretty name).
</dd>
<p></p>
<dt><strong><a name="item_form_size">form_size</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; size of html form to generate.
</dd>
<p></p>
<dt><strong><a name="item_form_type">form_type</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; type of html form to generate (checkbox,
select, text, etc).
</dd>
<p></p>
<dt><strong><a name="item_form_names">form_names</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; array ref of form names. This is used for
multi option form elements like checkboxes and multi selects. The name is what
is displayed to the user and not entered in the database.
</dd>
<p></p>
<dt><strong><a name="item_form_values">form_values</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; array ref of form values. Same as above,
but this is the value that actually gets entered.
</dd>
<p></p>
<dt><strong><a name="item_time_check">time_check</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; time check on or off. If set
</dd>
<p></p>
<dt><strong><a name="item_regex">regex</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; regular expression that all input must
pass before being inserted.
</dd>
<p></p>
<dt><strong><a name="item_pos">pos</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; position in table.
</dd>
<p></p>
<dt><strong><a name="item_not_null">not_null</a></strong><br />
</dt>
<dd>
Returns a <code>hash(ref)</code> of column name =&gt; not null (whether the field is allowed to
be null or not).
</dd>
<p></p></dl>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Table.pm,v 1.251 2005/02/28 20:37:41 jagerman Exp $</p>
</body>
</html>

View File

@ -0,0 +1,686 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Tree - Helps create and manage a tree in an SQL database.</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#methods">METHODS</a></li>
<ul>
<li><a href="#new__tree">new, tree</a></li>
<li><a href="#create__add_tree">create, add_tree</a></li>
<li><a href="#destroy__drop_tree">destroy, drop_tree</a></li>
<li><a href="#root_id_col__father_id_co__depth_col">root_id_col, father_id_co, depth_col</a></li>
<li><a href="#children">children</a></li>
<li><a href="#parents">parents</a></li>
<li><a href="#child_ids">child_ids</a></li>
<li><a href="#parent_ids">parent_ids</a></li>
</ul>
<li><a href="#indices">INDICES</a></li>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Tree - Helps create and manage a tree in an SQL database.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
use GT::SQL::Tree;</pre>
<pre>
my $tree = $table-&gt;tree;
my $children = $tree-&gt;children(id =&gt; [1,2,3], max_depth =&gt; 2);</pre>
<pre>
my $parents = $tree-&gt;parents(id =&gt; [4,5,6]);</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::SQL::Tree is designed to implement a tree structure with a SQL table. Most
of the work on managing the table is performed automatically behind the scenes,
however there are a couple of front end methods to retrieving the tree nodes
from a GT::SQL::Tree object.</p>
<p>
</p>
<hr />
<h1><a name="methods">METHODS</a></h1>
<p>
</p>
<h2><a name="new__tree">new, tree</a></h2>
<p>Typically, the way to get a tree object is to call -&gt;tree on a table object. The
table object then calls GT::SQL::Tree-&gt;new for you and returns the results,
which is a GT::SQL::Tree object. Typically you should not call -&gt;new directly,
but instead let $table-&gt;tree call it with the proper arguments.</p>
<p>
</p>
<h2><a name="create__add_tree">create, add_tree</a></h2>
<p>To use GT::SQL::Tree, you need to first call create(). You shouldn't call it
directly, but instead call -&gt;<code>add_tree()</code> on an editor object. The arguments to
add_tree are passed through to create, so that they are essentially the same
(there is one exception - add_tree passed in <code>table =&gt; $table_object</code>).</p>
<p><code>create()</code> will create a tree table, with the name passed on the name of the table
passed in. For example, if you wish to build a tree on 'MyTable', the tree table
that is created by <code>create()</code> will be named MyTable_tree. The tree table provides
easy one-query access to all of a nodes parents or children, and also keeps
track of the number of hops between a node and its descendant, allowing you to
limit how far you descend into the tree.</p>
<p>The following arguments are required:</p>
<dl>
<dt><strong><a name="item_table">table</a></strong><br />
</dt>
<dd>
This contains the table object for the table the tree is to be built upon. Note
that when calling add_tree you <strong>should not</strong> specify this - add_tree passes it
along on its own.
</dd>
<p></p>
<dt><strong><a name="item_father">father</a></strong><br />
</dt>
<dd>
This must specify the name of the father ID column. The father ID column
controls the relationship between father/child.
</dd>
<dd>
<p>For example, if your primary key is ``my_id'' and your father id column is
``my_father_id'', you would pass in ``my_father_id'' as the value to <a href="#item_father"><code>father</code></a>.</p>
</dd>
<p></p>
<dt><strong><a name="item_root">root</a></strong><br />
</dt>
<dd>
This is used to specify the name of the root column. For example, if your
primary key is ``my_id'' and your root id column is ``my_root_id'', you would pass
in ``my_root_id'' as the value to <a href="#item_root"><code>root</code></a>.
</dd>
<p></p>
<dt><strong><a name="item_depth">depth</a></strong><br />
</dt>
<dd>
This is used to specify the name of the depth column for the table. For example,
if you are using a column named ``my_depth'' to keep track of the depth of a node,
you would pass in ``my_depth'' as the value to <a href="#item_depth"><code>depth</code></a>.
</dd>
<p></p></dl>
<p>The following are optional arguments to create/add_tree:</p>
<dl>
<dt><strong><a name="item_force">force</a></strong><br />
</dt>
<dd>
Takes a value such as 'force' or 'check'. This value is passed on to the
GT::SQL table creation subroutine.
</dd>
<p></p>
<dt><strong><a name="item_rebuild">rebuild</a></strong><br />
</dt>
<dd>
You can pass in a GT::SQL::Tree::Rebuild object if you have an incomplete or
invalid table structure. See <a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Tree/Rebuild.html">the GT::SQL::Tree::Rebuild manpage</a> for more details.
</dd>
<p></p>
<dt><strong><a name="item_debug">debug</a></strong><br />
</dt>
<dd>
Sets the debug level of the tree object. <code>add_tree()</code> automatically passes in the
debug value for the table object, so it normally is not necessary to set this.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="destroy__drop_tree">destroy, drop_tree</a></h2>
<p>You can call <code>$tree-&gt;destroy</code> to destroy a tree. This involves dropping the
tree table and deleting the tree reference from the table the tree was on. This
can be called by calling <code>$tree-&gt;destroy()</code> on a GT::SQL::Tree object,
however this is typically invoked by calling <code>$editor-&gt;drop_tree()</code> on a
table editor object.</p>
<p>Neither <code>$tree-&gt;destroy()</code> nor <code>$editor-&gt;drop_tree()</code> take any
arguments.</p>
<p>
</p>
<h2><a name="root_id_col__father_id_co__depth_col">root_id_col, father_id_co, depth_col</a></h2>
<p>These three tree object methods return the name of the associated column in the
main table. Usually you will already know them, and these methods are primarily
used internally.</p>
<p>
</p>
<h2><a name="children">children</a></h2>
<p>This is where the usefulness of the tree module comes into play.
<code>$tree-&gt;children</code> is used to access all of the children of a particular
node. It takes a wide variety of arguments to control the return.</p>
<p>Usually, the return will be either a hash reference of array references each
containing hash references, or else an array reference of hash references. Which
reference you get depends on what you request via the <a href="#item_id"><code>id</code></a> parameter, described
below. Each inner hash reference is a row from the database, typically a joined
row from the table the tree is on with the tree table, however the
<a href="#item_roots_only"><code>roots_only</code></a>, <a href="#item_cols"><code>cols</code></a>, and <a href="#item_select_from"><code>select_from</code></a> parameters all change this behaviour.</p>
<p>The arguments to <code>children()</code> are as follows:</p>
<dl>
<dt><strong><a name="item_id">id</a></strong><br />
</dt>
<dd>
The value of the id key is either a scalar value, or an array reference. The
value/values to id should be the id whose descendants you are looking for. For
example, if you are looking for the children of ID 3 and ID 4, you would pass in
<code>id =&gt; [3, 4]</code>. The return value of children will be a hash reference
containing two keys: 3 and 4.
</dd>
<dd>
<p>If you are looking for the children of a single ID and pass the id as a scalar
value, you will get back an array reference as described above.</p>
</dd>
<dd>
<p>So, basically, if the value to id is an array reference, you will get back a
hash reference of array references of hash references; if it is a scalar value,
you will get back an array reference of hash references.
$tree-&gt;children(id =&gt; [1])-&gt;{1};
and
$tree-&gt;children(id =&gt; 1);
will result in the same thing.</p>
</dd>
<dd>
<p>To get all the trees in a single query, you pass in 0 as the value. This is as
if you are requesting the children of the imaginary root to which all roots
belong.</p>
</dd>
<dd>
<p><a href="#item_id"><code>id</code></a> is the only required parameter.</p>
</dd>
<p></p>
<dt><strong><a name="item_max_depth">max_depth</a></strong><br />
</dt>
<dd>
You can specify a max_depth value to specify that the records returned should
not be more a certain distance from the node. For example, supposing you have
this tree:
a
b
c
d
Selecting the children of a with a max_depth of 1 would return just b, not c or
d. A max_depth of 2 would return b and c.
</dd>
<dd>
<p>Not specifying max_depth means that you do not want to limit the maximum
distance from the parent of the returned values.</p>
</dd>
<p></p>
<dt><strong><a name="item_cols">cols</a></strong><br />
</dt>
<dd>
You can specify an array reference as the value to <a href="#item_cols"><code>cols</code></a> to alter the values
returned. Instead of doing ``SELECT * FROM ...'', the query will be ``SELECT &lt;what
you specify&gt; FROM ...''. Note, however, that the father, root, and depth columns
are required and will be present in the rows returned whether or not you specify
them.
</dd>
<p></p>
<dt><strong><a name="item_sort_col_2c_sort_order">sort_col, sort_order</a></strong><br />
</dt>
<dd>
Where the <code>sort</code> option sorts the results based on tree levels, <code>sort_col</code> and
<code>sort_order</code> control the sorting for nodes with the same father ID. For
example, with this tree:
a
b
c
<code>sort_col</code> and <code>sort_order</code> affect whether or not b comes before or after c.
The value of each can either be a scalar value or an array reference. There is
essentially no difference, the scalar value is just a little easier when you are
only sorting on a single column. The values of <code>sort_col</code> should be column
names, and the values of <code>sort_order</code> 'ASC' or 'DESC', per sort column
respectively. For example:
sort_col =&gt; ['a','b'], sort_order =&gt; ['ASC', 'DESC']
will sort first in ascending order based on the value of a, then descending
order based on the value of column b. This correlates directly to SQL - it
becomes ``ORDER BY a ASC, b DESC''.
</dd>
<dd>
<p>You can specify a different sort order for roots by using the <a href="#item_roots_order_by"><code>roots_order_by</code></a>
option, when using <code>id =&gt; 0</code>. See below.</p>
</dd>
<p></p>
<dt><strong><a name="item_condition">condition</a></strong><br />
</dt>
<dd>
If you want to limit the results, you can pass a GT::SQL::Condition object into
<code>children()</code> via the condition key. The condition will apply to the select
performed. For example, if you want to select rows with a column ``a'' having a
value less than 20, you could do:
my $cond = GT::SQL::Condition-&gt;new(a =&gt; '&lt;' =&gt; 20)
my $children = $tree-&gt;children(..., condition =&gt; $cond);
</dd>
<p></p>
<dt><strong><a name="item_limit">limit</a></strong><br />
</dt>
<dd>
Like condition, you can specify any valid LIMIT _____ value here, for example
``50, 25''. This option is only used when using <code>id =&gt; 0</code> - it will limit the
number of roots returned, taking into account the sort_col and sort_order.
</dd>
<p></p>
<dt><strong><a name="item_roots_only">roots_only</a></strong><br />
</dt>
<dd>
If you specify this option, it will assume that what you passed in via <a href="#item_id"><code>id</code></a>
consists only of root_ids. Doing so makes a join with the tree table
unneccessary and allows you to use the <a href="#item_select_from"><code>select_from</code></a> option. This option can be
used (and generally this is a good idea) when specifying <code>id =&gt; 0</code>.
</dd>
<p></p>
<dt><strong><a name="item_roots_order_by">roots_order_by</a></strong><br />
</dt>
<dd>
This option controlls the order of root posts, when selecting roots using
<code>id =&gt; 0</code> and a limit. <code>sort_order</code> above will affect the order of
children of the roots, but the order of the roots themselves will be controlled
by whatever <code>ORDER BY</code> value you specify here.
</dd>
<dd>
<p>Again, this option requires that <code>id =&gt; 0</code>, <a href="#item_roots_only"><code>roots_only</code></a>, and <a href="#item_limit"><code>limit</code></a> are
also being used.</p>
</dd>
<dd>
<p>If this option is omitted, the <code>ORDER BY</code> will be generated from the values of
the <code>sort_col</code> and <code>sort_order</code> options.</p>
</dd>
<p></p>
<dt><strong><a name="item_select_from">select_from</a></strong><br />
</dt>
<dd>
If you are using roots_only, you can also specify the <a href="#item_select_from"><code>select_from</code></a> option.
This option allows you to perform the selects from a GT::SQL::Relation object
instead of just the table associated with the tree. Note that the table
associated with the tree must be part of the relation, however you can have as
many other tables as you like.
</dd>
<p></p>
<dt><strong><a name="item_left_join">left_join</a></strong><br />
</dt>
<dd>
If the select_from relation should be a left join, pass <code>left_join =&gt; 1</code>.
This simply passes the <a href="#item_left_join"><code>left_join</code></a> option to -&gt;select. This option is only
applicable when select_from is used.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="parents">parents</a></h2>
<p>This is effectively the opposite of children. Instead of getting back all of the
children nodes, it gives the parents, all the way up to the root for any given
node. The return value is the same as that of <code>children</code>, so see that section.</p>
<p>Each array returned by <code>children</code> is sorted by depth from root to parent.</p>
<dl>
<dt><strong>id</strong><br />
</dt>
<dd>
<a href="#item_id"><code>id</code></a> is the only required parameter for <code>parents()</code>. It should be either a
scalar value or an array reference. You specify the ID's of children whose
parents you are looking for. The type of argument (scalar or array ref) affects
the return in the same way as <code>children()</code>.
</dd>
<p></p>
<dt><strong>cols</strong><br />
</dt>
<dd>
<a href="#item_cols"><code>cols</code></a> works in a similar way to the <a href="#item_cols"><code>cols</code></a> parameter to <code>children</code>. You
specify the columns you want in the return as an array ref. What you get back
will have these columns in it. If <a href="#item_cols"><code>cols</code></a> is not specified, you'll get back all
columns.
</dd>
<dd>
<p>Note that 'tree_id_fk' and the depth column for the table are required fields
and will be added if not specified.</p>
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="child_ids">child_ids</a></h2>
<p>If you are looking for just the ID's of the children of a particular node, you
should use this. The return value is one of the following, depending on what you
pass in:</p>
<p>hash reference of array references:
{ ID =&gt; [ID, ID, ...], ... }
with one ID in the hash reference for each id you specify. The array reference
contains the child ID's of the key ID.</p>
<p>hash reference of hash references:
{ ID =&gt; { ID =&gt; dist, ID =&gt; dist, ... }, ... }
with one ID in the other hash reference for each id you specify. The inner hash
reference is made of child_id =&gt; child_distance key-value pairs.</p>
<p>array reference or hash reference:
[ID, ID, ...]
hash reference:
{ ID =&gt; dist, ID =&gt; dist }</p>
<p>The first two apply when passing in an array reference for <a href="#item_id"><code>id</code></a>, the latter two
when passing a scalar value for <a href="#item_id"><code>id</code></a>. The first and third are without
<a href="#item_include_dist"><code>include_dist</code></a> specified, the second and fourth occur when you specify
<a href="#item_include_dist"><code>include_dist</code></a>.</p>
<dl>
<dt><strong>id</strong><br />
</dt>
<dd>
Like all other accessors, child_ids takes a scalar value or array reference as
the <a href="#item_id"><code>id</code></a> value. Return as noted above.
</dd>
<p></p>
<dt><strong><a name="item_include_dist">include_dist</a></strong><br />
</dt>
<dd>
This changes the return as noted above - instead of just getting an array
reference of child ID's, you get the child ID's as the keys of a hash reference,
and the distances of the child from the parent you requested as the values.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="parent_ids">parent_ids</a></h2>
<p>Exactly the same as child_ids, except that this works <em>up</em> the tree instead of
<em>down</em>. Takes the same arguments, gives the same possible returns.</p>
<p>
</p>
<hr />
<h1><a name="indices">INDICES</a></h1>
<p>A tree requires a few indices to get optimal performance out of it. If the table
is never expected to be more than just a few rows, you won't notice a
substantial difference, however, as with any table, as the table grows the
performance proper indexing provides becomes more appreciable.</p>
<p>Two indices are created automatically on the tree table, one on tree_id_fk, and
the other on tree_anc_id_fk,tree_dist, so you don't need to worry about that
table.</p>
<p>Obviously, the usage of the tree affects how many indices you want, this section
is simply to provide some general guidelines for the indices required.</p>
<p>Because the roots_only option is based solely on the main table and not the
tree, if you are using roots_only (calling children with id =&gt; 0 automatically
turns on the roots_only option), you want to make sure you have an index on the
root column. If you also use the max_depth depth option, add the depth column to
this index.</p>
<p>Keep in mind that you may need to mix other columns in here if you are using a
condition with children(). This also applies when using the <code>sort_col</code> and
<code>sort_order</code> parameters - basically you need to figure out what your indices
are, and then add in the root column and, if using max_depth, the depth column.</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Tree.pm,v 1.29 2005/05/31 06:26:32 brewt Exp $</p>
</body>
</html>

View File

@ -0,0 +1,422 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Tree::Rebuild - Helps to turn a table into one usable by GT::SQL::Tree.</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#new__create_a_rebuild_object">new - Create a Rebuild object</a></li>
</ul>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Tree::Rebuild - Helps to turn a table into one usable by GT::SQL::Tree.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
use GT::SQL::Tree;
use GT::SQL::Tree::Rebuild;</pre>
<pre>
my $rebuild = GT::SQL::Tree::Rebuild-&gt;new(
table =&gt; $DB-&gt;table('MyTable'),
missing_root =&gt; \&amp;root_code,
missing_father =&gt; \&amp;father_code,
missing_depth =&gt; \&amp;depth_code,
order_by =&gt; 'column_name'
);</pre>
<pre>
$DB-&gt;editor('MyTable')-&gt;add_tree(root =&gt; $root_col, father =&gt; $father_col, depth =&gt; $depth_col, rebuild =&gt; $rebuild);</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>GT::SQL::Tree::Rebuild is designed to go hand-in-hand with GT::SQL::Tree and
aids in turning an existing table into one with the neccessary root, father and
depth columns needed by GT::SQL::Tree.</p>
<p>The main purpose is to do a one-shot conversion of a table to make it compatible
with GT::SQL::Tree.</p>
<p>
</p>
<h2><a name="new__create_a_rebuild_object">new - Create a Rebuild object</a></h2>
<p>There is only one method that is called - new. You pass the arguments needed
and get back a GT::SQL::Tree::Rebuild object. This object should then be passed
into GT::SQL::Tree-&gt;create (typically via <code>$editor-&gt;add_tree()</code>)</p>
<p><code>new()</code> takes a hash with up to 4 argument pairs: ``table'' (required), and one or
more of ``missing_root'', ``missing_father'', or ``missing_depth''. The values are
explained below.</p>
<dl>
<dt><strong><a name="item_table">table</a></strong><br />
</dt>
<dd>
Required. You specify the table object for the table to rebuild. For example, if
you are going to add a tree to the ``Category'' table, you provide the ``Category''
table object here.
</dd>
<p></p>
<dt><strong><a name="item_cols">cols</a></strong><br />
</dt>
<dd>
By default, an entire row will be returned. To speed up the process and lower
the memory usage, you can use the <a href="#item_cols"><code>cols</code></a> option, which specifies the columns to
select for $row. It is recommended that you only select columns that you need as
doing so will definately save time and memory.
</dd>
<p></p>
<dt><strong><a name="item_missing_father_2c_missing_root_2c_missing_depth">missing_father, missing_root, missing_depth</a></strong><br />
</dt>
<dd>
Each of these arguments takes a code reference as its value. The arguments to
the code references are as follows:
</dd>
<dl>
<dt><strong><a name="item__24row">$row</a></strong><br />
</dt>
<dd>
The first argument is a hash reference of the row being examined. Your job, in
the code reference, is to examine $row and determine the missing value,
depending on which code reference is being called. missing_root needs to return
the root_id for this row; missing_father needs to return the father_id, and the
missing_depth code reference should return the depth for the row.
</dd>
<p></p>
<dt><strong><a name="item__24table">$table</a></strong><br />
</dt>
<dd>
The second argument passed to the code references is the same table object that
you pass into new(), which you can select from if neccessary.
</dd>
<p></p></dl>
<dt><strong><a name="item_missing_father">missing_father</a></strong><br />
</dt>
<dd>
The <a href="#item_missing_father"><code>missing_father</code></a> code reference is called first - before <a href="#item_missing_root"><code>missing_root</code></a>
and <a href="#item_missing_depth"><code>missing_depth</code></a>. The code reference is called as described above and should
return the ID of the father of the row passed in. A false return (0 or undef) is
interpreted as meaning that this is a root and therefore has no father.
</dd>
<p></p>
<dt><strong><a name="item_missing_root">missing_root</a></strong><br />
</dt>
<dd>
<a href="#item_missing_root"><code>missing_root</code></a> has to return the root of the row passed in. This is called
after <a href="#item_missing_father"><code>missing_father</code></a>, so the $row will contain whatever you returned in
<a href="#item_missing_father"><code>missing_father</code></a> in the father ID column. Of course, this only applies if using
both <a href="#item_missing_root"><code>missing_root</code></a> and <a href="#item_missing_father"><code>missing_father</code></a>.
</dd>
<p></p>
<dt><strong><a name="item_missing_depth">missing_depth</a></strong><br />
</dt>
<dd>
<a href="#item_missing_depth"><code>missing_depth</code></a> has to return the depth of the row passed in. This is called
last, so if you are also using <a href="#item_missing_father"><code>missing_father</code></a> and/or <a href="#item_missing_root"><code>missing_root</code></a>, you
will have whatever was returned by those code refs available in the $row.
</dd>
<p></p>
<dt><strong><a name="item_order_by">order_by</a></strong><br />
</dt>
<dd>
The query done to retrieve records can be sorted using the <a href="#item_order_by"><code>order_by</code></a> option.
It should be anything valid for ``ORDER BY _____''. Often it can be useful to have
your results returned in a certain order - for example:
order_by =&gt; 'depth_column ASC'
would insure that parents come before roots. Of course, this example wouldn't
work if you are using ``missing_depth'' since none of the depth values will be
set.
</dd>
<p></p></dl>
<p>Once you have a GT::SQL::Tree::Rebuild object, you should pass it into
<code>GT::SQL::Tree-&gt;create</code> (which typically involves passing it into
<code>$editor-&gt;add_tree()</code>, which passed it through). Before calculating the
tree, GT::SQL::Tree will call on the rebuild object to reproduce the father,
root, and/or depth columns (whichever you specified).</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Rebuild.pm,v 1.10 2005/04/06 23:11:08 jagerman Exp $</p>
</body>
</html>

View File

@ -0,0 +1,720 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>GT::SQL::Driver::Types - Column types supported by GT::SQL</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#attributes">ATTRIBUTES</a></li>
<li><a href="#types">TYPES</a></li>
<ul>
<li><a href="#integer_types">Integer types</a></li>
<li><a href="#floatpoint_types">Float-point types</a></li>
<li><a href="#aribtrary_precision_numbers">Aribtrary precision numbers</a></li>
<li><a href="#character_types">Character types</a></li>
<li><a href="#date_time_types">Date/time types</a></li>
<li><a href="#deprecated_types">Deprecated types</a></li>
</ul>
<li><a href="#see_also">SEE ALSO</a></li>
<li><a href="#maintainer">MAINTAINER</a></li>
<li><a href="#copyright">COPYRIGHT</a></li>
<li><a href="#version">VERSION</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>GT::SQL::Driver::Types - Column types supported by GT::SQL</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
my $c = $DB-&gt;creator('new_table');
$c-&gt;cols({
column_name =&gt; { type =&gt; 'INT', default =&gt; 42, not_null =&gt; 1, unsigned =&gt; 1 }
# ... more columns ...
});</pre>
<pre>
my $e = $DB-&gt;editor('table_name');
$e-&gt;add_col(column_name2 =&gt; { type =&gt; 'CHAR', size =&gt; 10, default =&gt; 'abc' });</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>This module should not be used directly, however the documentation here
describes the different types support by GT::SQL and any caveats associated
with those types.</p>
<p>
</p>
<hr />
<h1><a name="attributes">ATTRIBUTES</a></h1>
<p>All types are specified as a <code>column_name =&gt; { column definition }</code> pair,
where the column definition should contain at least a <code>type</code> key containing
one of the <a href="#types">TYPES</a> outlined below. Commonly accepted attributes are:</p>
<dl>
<dt><strong><a name="item_not_null">not_null</a></strong><br />
</dt>
<dd>
Used to specify that a column should not be allowed to contain NULL values.
Note that for character/string data types, a 0-character string (and, for
<a href="#item_char"><code>CHAR</code></a>/<a href="#item_varchar"><code>VARCHAR</code></a> columns, strings containing only spaces), <strong>are</strong> considered
NULL values are are not permitted if the column is specified as <a href="#item_not_null"><code>not_null</code></a>.
The value passed to not_null should be true.
</dd>
<p></p>
<dt><strong><a name="item_default">default</a></strong><br />
</dt>
<dd>
Used to specify a default value to be used for the column when no explicit
value is provided when a row is inserted. The default value is also used for
the value in existing rows when adding a not_null column to an existing table -
in such a case, the <a href="#item_default"><code>default</code></a> is <strong>required</strong>.
</dd>
<dd>
<p>Also see the <a href="#text"><a href="#item_text"><code>TEXT</code></a></a> section regarding caveats and limitations of
using <a href="#item_default"><code>default</code></a>'s for <a href="#item_text"><code>TEXT</code></a> types.</p>
</dd>
<p></p></dl>
<p>Other column attributes are supported as outlined below. In addition to
attributes mentioned in this document, various attributes are available that
influence automatically-generated forms displayed by GT::SQL::Admin - see
<a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Creator.html">the GT::SQL::Creator manpage</a> for details on these attributes.</p>
<p>
</p>
<hr />
<h1><a name="types">TYPES</a></h1>
<p>
</p>
<h2><a name="integer_types">Integer types</a></h2>
<dl>
<dt><strong><a name="item_tinyint">TINYINT</a></strong><br />
</dt>
<dd>
The <a href="#item_tinyint"><code>TINYINT</code></a> type specifies an 8-bit integer able to handle values from -128
to 127. Some databases will allow larger values due to not supporting an
appropriate data type. The <code>unsigned</code> column attribute <em>may</em> turn this into
an unsigned value supporting values from 0 to 255; due to this type being
implemented as a larger integer type in some databases (which, incidentally,
coincide with the databases not supporting an unsigned 8-bit <a href="#item_tinyint"><code>TINYINT</code></a>) using
an <code>unsigned</code> TINYINT type will result in a column able to store any value
from 0-255, unlike most of the larger integer types below.
</dd>
<p></p>
<dt><strong><a name="item_smallint">SMALLINT</a></strong><br />
</dt>
<dd>
The <a href="#item_smallint"><code>SMALLINT</code></a> type specifies a 16-bit integer able to handle values from
-32768 to 32767. The <code>unsigned</code> column attribute <em>may</em> turn this into an
unsigned value supporting values from 0 to 65535, however this is <strong>not</strong>
guaranteed. If you need to store values in the 32768-65535 range, a larger
type is recommended.
</dd>
<p></p>
<dt><strong><a name="item_mediumint">MEDIUMINT</a></strong><br />
</dt>
<dd>
The <a href="#item_mediumint"><code>MEDIUMINT</code></a> type (only natively supported by MySQL) specifies a 24-bit
integer type able to hold values from -8388608 to 8388607. If the <code>unsigned</code>
column attribute is specified, this allows values from 0 to 16777215. Due to
this being supported with the <code>unsigned</code> attribute, or implemented as a larger
data type, an <code>unsigned</code> <a href="#item_mediumint"><code>MEDIUMINT</code></a> will always supported values up to
16777215.
</dd>
<p></p>
<dt><strong><a name="item_int_2c_integer">INT, INTEGER</a></strong><br />
</dt>
<dd>
The <code>INT</code> type specifies a 32-bit integer able to hold values from -2147483648
to 2147483647. If the <code>unsigned</code> column attribute is specified, the column
<em>may</em> support values from 0 to 4294967295, however this is <strong>not</strong> guaranteed.
If values larger than 2147483647 are needed, using the <a href="#item_bigint"><code>BIGINT</code></a> type below is
recommended. <code>INTEGER</code> is an alias for <code>INT</code>.
</dd>
<p></p>
<dt><strong><a name="item_bigint">BIGINT</a></strong><br />
</dt>
<dd>
The largest integral type, <a href="#item_bigint"><code>BIGINT</code></a> specifies a 64-bit integer value able to
hold values from -9223372036854775808 to 9223372036854775807. If specified as
<code>unsigned</code>, the column <em>may</em> support values from 0 to 18446744073709551616,
but this is <strong>not</strong> guaranteed. If larger values are needed, use the <a href="#item_decimal"><code>DECIMAL</code></a>
type with a <code>scale</code> value of <code>0</code>.
</dd>
<p></p>
<dt><strong><a name="item_back">back</a></strong><br />
</dt>
</dl>
<p>
</p>
<h2><a name="floatpoint_types">Float-point types</a></h2>
<dl>
<dt><strong><a name="item_real_2c_float">REAL, FLOAT</a></strong><br />
</dt>
<dd>
The <code>REAL</code> type specifies a 32-bit floating-point (i.e. fractional) number,
accurate to 23 binary digits (which works out to <em>approximately</em> 6 decimal
digits). The values may be signed, and can range from at least as small as
10^-37 to at least as large as 10^37. For more precise values, the <a href="#item_double"><code>DOUBLE</code></a>
type is recommended. For exact precision (i.e. for monetary values), the
(often slower) <a href="#item_decimal"><code>DECIMAL</code></a> type is recommended. <code>FLOAT</code> is an alias for
<code>REAL</code>.
</dd>
<p></p>
<dt><strong><a name="item_double">DOUBLE</a></strong><br />
</dt>
<dd>
The <a href="#item_double"><code>DOUBLE</code></a> type specifies a 64-bit floating-point (i.e. fractional) number,
accurate to 52 binary digits (<em>approximately</em> 15 decimal digits). The values
may be signed, and can range from at least as small as 10^-307 to at least as
large as 10^308 (except under Oracle - see below). For exact precision (i.e.
for monetary values), the (often slower) <a href="#item_decimal"><code>DECIMAL</code></a> type is recommended.
</dd>
<dd>
<p>Take note that Oracle doesn't properly support the full range supported by
other databases' <a href="#item_double"><code>DOUBLE</code></a> types - the smallest number supported (assuming
precision to digits) is 10^-113 - specifically, the number of digits after the
decimal place may not exceed 128 - so 1.2345678901e-117 is acceptable, while
1.23456789012e-117 is not. The larger number Oracle supports is just less than
1e+126 (i.e. 9.999...e+125), as opposed to other databases' 1e+307. If you
need to store numbers larger or smaller than this amount, you'll have to find
some other way to store your numbers (i.e. Math::BigFloat with a <a href="#item_varchar"><code>VARCHAR</code></a>).</p>
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="aribtrary_precision_numbers">Aribtrary precision numbers</a></h2>
<dl>
<dt><strong><a name="item_decimal">DECIMAL</a></strong><br />
</dt>
<dd>
The <a href="#item_decimal"><code>DECIMAL</code></a> type is provided to support numbers of arbitrary precision. It
requires two attributes, <code>scale</code> and <code>precision</code>, where <code>scale</code> specifies
the number of decimal places, and precision specifies the number of overall
digits. For example, <code>123.45</code> has a <code>precision</code> of 5, and a <code>scale</code> of 2.
<code>42</code> has a <code>precision</code> or 2, and a <code>scale</code> of 0. <code>scale</code> must be less than
<code>precision</code>, and <code>precision</code> must not exceed 38. Also, although the value
stored and retrieved is completely accurate within it's given precision and
scale range, the accuracy available for comparisons (i.e. column = number) is
only reliably accurate to approximately the same level as DOUBLE's - that is,
about 15 digits.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="character_types">Character types</a></h2>
<dl>
<dt><strong><a name="item_char">CHAR</a></strong><br />
</dt>
<dd>
The <a href="#item_char"><code>CHAR</code></a> type is used to specify a string of characters from 1 to 255
characters long. It takes a <code>size</code> attribute which must be 255 or less, and
specifies the size of the column values - if not specified, 255 will be used.
This implementation's <a href="#item_char"><code>CHAR</code></a> type, for historic reasons, <strong>will not</strong> pad
inserted values with spaces, but <strong>may</strong> trim trailing spaces when retrieving
and/or comparing values. Note that this is <strong>not</strong> SQL compliant <a href="#item_char"><code>CHAR</code></a>
behaviour - SQL-compliant <a href="#item_char"><code>CHAR</code></a>'s are padded with spaces up to their size.
</dd>
<dd>
<p>What this ends up meaning is that for everything except MySQL, <a href="#item_char"><code>CHAR</code></a> columns
will be mapped to <a href="#item_varchar"><code>VARCHAR</code></a> columns. Note that even MySQL, which is the only
database for which <a href="#item_char"><code>CHAR</code></a>'s are not automatically mapped into <a href="#item_varchar"><code>VARCHAR</code></a>'s,
will <em>transparently</em> convert <a href="#item_char"><code>CHAR</code></a> columns to <a href="#item_varchar"><code>VARCHAR</code></a> columns if any
non-fixed-size datatype (anything other than a <a href="#item_char"><code>CHAR</code></a> or numeric types) is
used in or added to the table. As a general rule, <a href="#item_varchar"><code>VARCHAR</code></a> is preferred over
<a href="#item_char"><code>CHAR</code></a> except when dealing with columns whose values don't vary significantly
in length <strong>and</strong> are in a table that only contains fixed-size data types
(<a href="#item_char"><code>CHAR</code></a>'s and numeric types). Everywhere else, use <a href="#item_varchar"><code>VARCHAR</code></a>'s, since that's
what you'll be getting anyway.</p>
</dd>
<dd>
<p>A <code>binary</code> attribute is supported, which <em>may</em> indicates that comparisons
with this field should be case-sensitive. Note that this only works on
databases that actually have a case-sensitive <a href="#item_char"><code>CHAR</code></a> field - currently, only
MySQL.</p>
</dd>
<p></p>
<dt><strong><a name="item_varchar">VARCHAR</a></strong><br />
</dt>
<dd>
The <a href="#item_varchar"><code>VARCHAR</code></a> type is identical to the above <a href="#item_char"><code>CHAR</code></a> type <strong>except</strong> as
follows. Unlike a <a href="#item_char"><code>CHAR</code></a>, a <a href="#item_varchar"><code>VARCHAR</code></a> column does not take up <code>size</code> bytes
of storage space - typically the storage space is only slightly larger
(typically 1 byte) than the size of the value stored. As such, <a href="#item_varchar"><code>VARCHAR</code></a>'s
are almost always preferred over columns, except for nearly-constant sized
data, or tables with all fixed-width data types (<a href="#item_char"><code>CHAR</code></a>'s, <code>INT</code>'s, and
non-<a href="#item_decimal"><code>DECIMAL</code></a> numeric types). <a href="#item_varchar"><code>VARCHAR</code></a> columns will not be padded with
whitespace up to <code>size</code>, however trailing whitespace <code>may</code> be trimmed from
values.
</dd>
<dd>
<p>As with <a href="#item_char"><code>CHAR</code></a>, the <code>binary</code> attribute <em>may</em> make the <a href="#item_varchar"><code>VARCHAR</code></a> values
case-sensitive for the matching purposes.</p>
</dd>
<p></p>
<dt><strong><a name="item_text">TEXT</a></strong><br />
</dt>
<dd>
The <a href="#item_text"><code>TEXT</code></a> type is similar to <a href="#item_varchar"><code>VARCHAR</code></a> types, except that they are always
case-insensitive for matching/equality, and can contain longer values. The
<a href="#item_text"><code>TEXT</code></a> type takes a <code>size</code> attribute which contains the length required - if
not provided, a value of approximately 2 billion is used. Note that the
maximum size of the column will usually be larger than the value you specify to
<code>size</code> - it simply indicates to the driver to use a field capable of at least
the size specified. The values of <a href="#item_text"><code>TEXT</code></a> fields are case-insensitive in terms
of matches and equality. The maximum <code>size</code> value, and the default, is
approximately 2 billion.
</dd>
<dd>
<p>Certain aliases are provided with implicit size defaults - <code>TINYTEXT</code>,
<code>SMALLTEXT</code>, <code>MEDIUMTEXT</code>, and <code>LONGTEXT</code>, which are equivelant to <a href="#item_text"><code>TEXT</code></a>
with <code>size</code> values of 255, 65535, 16777215, and 2147483647, respectively.</p>
</dd>
<dd>
<p>Depending on the <code>size</code> value, certain databases _may_ use different
underlying types. MySQL, for example, uses the smallest possible type between
its native <code>TINYTEXT</code>, <a href="#item_text"><code>TEXT</code></a>, <code>MEDIUMTEXT</code>, and <code>LONGTEXT</code> types. As
such, it is recommended that you use a sufficiently large <code>size</code> value unless
absolutely sure that you will never need a larger value.</p>
</dd>
<dd>
<p>Also note that <a href="#item_text"><code>TEXT</code></a> types <strong>do not</strong> support normal equality operations - in
fact, the only portable things that can be done with <a href="#item_text"><code>TEXT</code></a> columns is <code>IS
NULL</code> tests (in GT::SQL this means ``='' <code>undef</code>) and <code>LIKE</code> comparisons - but,
for portability with all supported databases, the argument of a <code>LIKE</code> may not
exceed 4000 characters.</p>
</dd>
<dd>
<p>Also note that the <a href="#item_default"><code>default</code></a> value will be ignored by MySQL, which does not
support having default values on <a href="#item_text"><code>TEXT</code></a> columns. Everything else, however,
will properly support this, and the default will still be used when inserting
with GT::SQL even when using MySQL. Also note that the default value of
<a href="#item_text"><code>TEXT</code></a> types <strong>must not</strong> exceed 3998 characters, due to limits imposed by some
databases. Longer indexes may work in some cases, but are not guaranteed - for
example, a table resync on MSSQL will not work.</p>
</dd>
<p></p>
<dt><strong><a name="item_enum">ENUM</a></strong><br />
</dt>
<dd>
The <a href="#item_enum"><code>ENUM</code></a> type is a MySQL-only type that supports certain fixed string
values. On non-MySQL databases, it is simply mapped to a <a href="#item_varchar"><code>VARCHAR</code></a> column.
It requires a <code>values</code> option which should have a value of an array reference
of string values that the ENUM should permit. The <a href="#item_enum"><code>ENUM</code></a> type is generally
discouraged in favour of a <a href="#item_char"><code>CHAR</code></a>, <a href="#item_varchar"><code>VARCHAR</code></a>, or an
<a href="#integer_types">integral type</a> column, all of which provide more flexibility
(i.e. if you want to add a new possible value) and are not a single
database-specific type.
</dd>
<p></p></dl>
<p>
</p>
<h2><a name="date_time_types">Date/time types</a></h2>
<p>All of the date/time types support by MySQL will be handled by GT::SQL, for
compatibility reasons. However, all types other than DATE and <a href="#item_datetime"><code>DATETIME</code></a>
should be considered deprecated as cross-database compatibility is not possible
using these types. In particular, <a href="#item_timestamp"><code>TIMESTAMP</code></a> will work exactly like a
<a href="#item_datetime"><code>DATETIME</code></a> on every non-MySQL database; <a href="#item_time"><code>TIME</code></a> and <a href="#item_date"><code>DATE</code></a> will work in
Postgres just like they do in MySQL; under everything else, <a href="#item_time"><code>TIME</code></a> won't work
at all, and <a href="#item_date"><code>DATE</code></a> will work like <a href="#item_datetime"><code>DATETIME</code></a>.</p>
<p>GT::SQL users are urged to at least consider using an INT column, designed to
contain Perl's <code>time()</code> value, in lieu of any of the Date/time types as it avoids
many problems typically associated with storing local times - such as time zone
issues and non-local databases. That said, if you are certain you want a
Date/time type, a DATETIME is preferred as it will work (almost) the same
everywhere.</p>
<dl>
<dt><strong><a name="item_datetime">DATETIME</a></strong><br />
</dt>
<dd>
A date field, which stores values in <code>YYYY-MM-DD HH:MM:SS</code> format (where
<code>'HH'</code> is a 24-hour hour). Inserted values may omit the seconds
(<code>YYYY-MM-DD HH:MM</code>), or time (<code>YYYY-MM-DD</code>) portions of the value. Omitted
values will default to <code>0</code>.
</dd>
<dd>
<p>Note that <a href="#item_datetime"><code>DATETIME</code></a> values returned from a database <em>may</em> include
fractional-second precision values such as <code>2004-01-01 12:00:07.123</code>.
Currently MSSQL and Postgres exhibit this behaviour. MSSQL's <a href="#item_datetime"><code>DATETIME</code></a> type
always includes exactly three decimal digits, while Postgres' <a href="#item_timestamp"><code>TIMESTAMP</code></a> type,
used for GT::SQL <a href="#item_datetime"><code>DATETIME</code></a>'s, stores times with 6 decimal-digit precision.
Unlike MSSQL, however, Postgres will only display decimal digits if a
significant decimal value has been stored in the database. This happens with
the <code>time_check</code> option, below, and when an explicit fractional second value
has been inserted into the database.</p>
</dd>
<dd>
<p>A <code>time_check</code> attribute may be passed with a true value; if set, any update
to the row that doesn't explicitly set the column will have the column updated
to the <strong>database's</strong> current local time. Due to issues with times and/or
timezones, this option should be considered deprecated and discouraged - it is
recommended instead that you update the value yourself using a value that
<em>your script</em> thinks is local time (or, better yet, use an <code>INT</code> column with
unix time values (i.e. <code>time()</code> in Perl), which are timezone-independent to begin
with), rather than trying to depend on a database having the same time and time
zone as your script.</p>
</dd>
<p></p>
<dt><strong><a name="item_date">DATE</a></strong><br />
</dt>
<dd>
Just like <a href="#item_datetime"><code>DATETIME</code></a>, except (under MySQL and Postgres) it only stores and
returns the <code>YYYY-MM-DD</code> portion of the value. Note that when using this
type, care must be taken to extract only the desired portion of the output as
databases other than MySQL and Postgres map this to a <a href="#item_datetime"><code>DATETIME</code></a> above, which
returns 'YYYY-MM-DD HH:MM:SS' values (with a possible fractional seconds value,
in the case of MSSQL/Postgres). Using a <a href="#item_datetime"><code>DATETIME</code></a> or <code>INT</code> field is
generally preferred, but this type may be slightly more effecient and take
slightly less space (4 bytes instead of 8 bytes) on MySQL and Postgres
databases.
</dd>
<dd>
<p>Like <a href="#item_datetime"><code>DATETIME</code></a>, this handles a <code>time_check</code> field, with the same caveats
described in the the <a href="#item_datetime"><code>DATETIME</code></a> <code>time_check</code> description.</p>
</dd>
<p></p></dl>
<p>The alternate, deprecated date/time types supported are listed in the
<a href="#deprecated_types">Deprecated types</a> section below.</p>
<p>
</p>
<h2><a name="deprecated_types">Deprecated types</a></h2>
<dl>
<dt><strong><a name="item_blob">BLOB</a></strong><br />
</dt>
<dd>
Limited <a href="#item_blob"><code>BLOB</code></a> support (<code>TINYBLOB</code>, <a href="#item_blob"><code>BLOB</code></a>, <code>MEDIUMBLOB</code>, and <code>LONGBLOB</code>)
existed in older versions of GT::SQL, however the support, where it existed at
all, was partial and incomplete. Additionally, only certain drivers (MySQL and
Oracle) supported <a href="#item_blob"><code>BLOB</code></a> types at all. As such, the limited <a href="#item_blob"><code>BLOB</code></a> support
present in old GT::SQL versions is still supported under MySQL and Oracle, but
any new development should avoid them. If you really need to store binary
data, it is strongly recommended that you use files, and simply store
file<em>names</em> in the database.
</dd>
<p></p>
<dt><strong><a name="item_timestamp">TIMESTAMP</a></strong><br />
</dt>
<dd>
This extremely odd MySQL data type, depending on the version of MySQL, stores
times in either the format described in <a href="#item_datetime"><code>DATETIME</code></a> (MySQL 4.1+) or an
extremely MySQL-specific <code>YYYYMMDDhhmmss</code> format. Another MySQL-specific of
this data type is that the first - and ONLY the first - <a href="#item_timestamp"><code>TIMESTAMP</code></a> column in
a row will be automatically updated to the current local timezone-dependent
date and time. Use a <a href="#item_datetime"><code>DATETIME</code></a> (possibly with the <code>time_check</code> option)
instead.
</dd>
<p></p>
<dt><strong><a name="item_time">TIME</a></strong><br />
</dt>
<dd>
A MySQL and Postgres-specific type that stores only the time-of-day in
<code>HH:MM:SS</code> format. Deprecated due to non-portability and incompatibility on
other databases. If you really want to store just the time of day, either use
an <code>INT</code> to store the minutes or seconds since midnight, or use a <a href="#item_char"><code>CHAR</code></a>
which you update with the <code>HH:MM:SS</code> value. Causes a fatal error on databases
which don't have an appropriate native type.
</dd>
<p></p>
<dt><strong><a name="item_year">YEAR</a></strong><br />
</dt>
<dd>
A particularly useless MySQL-specific data type that stores only the year
portion of a date. Use a <a href="#item_smallint"><code>SMALLINT</code></a> instead. Causes a fatal error on
anything other than MySQL.
</dd>
<p></p></dl>
<p>
</p>
<hr />
<h1><a name="see_also">SEE ALSO</a></h1>
<p><a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL.html">the GT::SQL manpage</a></p>
<p><a href="glist.cgi?do=admin_gtdoc&topic=/GT/SQL/Creator.html">the GT::SQL::Creator manpage</a></p>
<p>
</p>
<hr />
<h1><a name="maintainer">MAINTAINER</a></h1>
<p>Jason Rhinelander</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (c) 2004 Gossamer Threads Inc. All Rights Reserved.
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Revision: $Id: Types.pm,v 1.2 2004/09/07 20:56:59 jagerman Exp $</p>
</body>
</html>

View File

@ -0,0 +1,272 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>/tmp/glist/private/lib/GT/SQL/Upgrade.pm</title>
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
<style type="text/css">
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
/* $MVD$:fontset("Arial","Arial") */
/* $MVD$:fontset("Arial Black","Arial Black") */
/* $MVD$:fontset("Algerian","Algerian") */
body {
background-color: white;
font-family: Verdana, Arial, sans-serif;
font-size: small;
color: black;
}
p {
background-color : white;
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
h1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
background-color : white;
color : maroon;
}
h2 {
font-family : Verdana, Arial, sans-serif;
font-size : medium;
font-weight : bold;
color : blue;
background-color : white;
}
h3 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : medium;
color : black;
background-color : white;
}
h4 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : maroon;
background-color : white;
}
h5 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : blue;
background-color : white;
}
h6 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : small;
color : black;
background-color : white;
}
ul {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
ol {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
li {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
th {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
td {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dl {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dd {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
dt {
font-family : Verdana, Arial, sans-serif;
font-size : small;
color : black;
}
code {
font-family : Courier;
font-size : small;
color : black;
}
pre {
font-family : Courier;
font-size : small;
color : black;
}
.mvd-H1 {
font-family : Verdana, Arial, sans-serif;
font-weight : bold;
font-size : 14.0pt;
background-color : transparent;
background-image : none;
color : maroon;
}
.mvd-H2 {
font-family : Verdana, Arial, sans-serif;
font-size : 12.0pt;
color : blue;
}
p.indent {
font-family : "Verdana, Arial, sans-serif";
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
.mvd-P-indent {
font-family : Verdana, Arial, sans-serif;
list-style-type : circle;
list-style-position : inside;
color : black;
margin-left : 16.0pt;
}
pre.programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE-programlisting {
font-size : 9.0pt;
list-style-type : disc;
margin-left : 16.0pt;
margin-top : -14.0pt;
}
.mvd-PRE {
font-size : 9.0pt;
}
p.note {
margin-left : 28.0pt;
}
.mvd-P-note {
margin-left : 28.0pt;
}
.mvd-H4 {
font-family : Verdana, Arial, sans-serif;
font-weight : normal;
font-size : 9.0pt;
color : black;
margin-left : 6.0pt;
margin-top : -14.0pt;
}
.mvd-P {
font-family : Verdana, Arial, sans-serif;
font-size : 10.0pt;
color : black;
}
.mvd-BODY {
font-family : Verdana, Arial, sans-serif;
background-color : white;
}
p.indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
.mvd-P-indentnobullet {
font-family : Verdana, Arial, sans-serif;
list-style-type : none;
}
</style>
</head>
<body style="background-color: white">
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!-- INDEX END -->
</body>
</html>