commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r7557 - in trunk/gnue-common/doc: . manual


From: reinhard
Subject: [gnue] r7557 - in trunk/gnue-common/doc: . manual
Date: Wed, 1 Jun 2005 06:26:53 -0500 (CDT)

Author: reinhard
Date: 2005-06-01 06:26:50 -0500 (Wed, 01 Jun 2005)
New Revision: 7557

Added:
   trunk/gnue-common/doc/manual/
   trunk/gnue-common/doc/manual/Makefile
   trunk/gnue-common/doc/manual/fdl.texi
   trunk/gnue-common/doc/manual/gnue-common.texi
   trunk/gnue-common/doc/manual/gpl.texi
   trunk/gnue-common/doc/manual/schema.texi
Log:
Added documentation contributed by Niklas Rydberg. Really need to clean up docs
at some point, I think there are quite some duplicates.


Added: trunk/gnue-common/doc/manual/Makefile
===================================================================
--- trunk/gnue-common/doc/manual/Makefile       2005-05-31 22:09:38 UTC (rev 
7556)
+++ trunk/gnue-common/doc/manual/Makefile       2005-06-01 11:26:50 UTC (rev 
7557)
@@ -0,0 +1,43 @@
+DOC=gnue-common
+# To use directory name as document name use:
+# DOC=$(shell basename `pwd`)
+MAIN=${DOC}.texi
+SOURCES=gnue-common.texi
+# To split the source use:
+# SOURCES=$(shell ls [0-9][0-9]-*)
+
+all: ${DOC}.txt ${DOC}.html ${DOC}.dvi ${DOC}.pdf ${DOC}.ps aux-clean
+
+version.texi: ${SOURCES}
+       echo -n "@set UPDATED " > version.texi
+       grep '$$Date:' ${SOURCES} | cut --delimiter=' ' --fields=3 | sort | 
tail -1 >> version.texi
+       echo >> version.texi
+       echo -n "@set VERSION " >> version.texi
+       (cd ../..; echo "import src; print src.VERSION" | gcvs) >> version.texi
+
+${DOC}.txt: ${MAIN} ${SOURCES} version.texi
+       LANG=C makeinfo --no-headers --output=${DOC}.txt ${MAIN}
+
+${DOC}.html: ${MAIN} ${SOURCES} version.texi
+       LANG=C makeinfo --html ${MAIN}
+       echo "<html>" > ${DOC}.html
+       echo "  <head>" >> ${DOC}.html
+       echo "    <meta http-equiv=\"Refresh\" content=\"0; 
URL=${DOC}/index.html\">" >> ${DOC}.html
+       echo "  </head>" >> ${DOC}.html
+       echo "</html>" >> ${DOC}.html
+
+${DOC}.dvi: ${MAIN} ${SOURCES} version.texi
+       LANG=C texi2dvi ${MAIN}
+
+${DOC}.pdf: ${MAIN} ${SOURCES} version.texi
+       LANG=C texi2pdf ${MAIN}
+
+${DOC}.ps: ${DOC}.dvi
+       dvips ${DOC} -o ${DOC}.ps
+
+aux-clean:
+       rm -f *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.??s
+
+clean: aux-clean
+       rm -f version.texi *.dvi *.txt *.html *.pdf *.ps
+       rm -rf ${DOC}

Added: trunk/gnue-common/doc/manual/fdl.texi
===================================================================
--- trunk/gnue-common/doc/manual/fdl.texi       2005-05-31 22:09:38 UTC (rev 
7556)
+++ trunk/gnue-common/doc/manual/fdl.texi       2005-06-01 11:26:50 UTC (rev 
7557)
@@ -0,0 +1,452 @@
+
address@hidden GNU Free Documentation License
address@hidden GNU Free Documentation License
+
address@hidden FDL, GNU Free Documentation License
address@hidden Version 1.2, November 2002
+
address@hidden
+Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
address@hidden display
+
address@hidden 0
address@hidden
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
address@hidden
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The ``Document'', below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as ``you''.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
address@hidden without markup, Texinfo input format, address@hidden input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
address@hidden, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification.  Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
address@hidden  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
address@hidden for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
address@hidden
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
address@hidden
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
address@hidden
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
address@hidden A
address@hidden
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
address@hidden
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
address@hidden
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
address@hidden
+Preserve all the copyright notices of the Document.
+
address@hidden
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
address@hidden
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
address@hidden
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
address@hidden
+Include an unaltered copy of this License.
+
address@hidden
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
address@hidden
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
address@hidden
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
address@hidden
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
address@hidden
+Delete any section Entitled ``Endorsements''.  Such a section
+may not be included in the Modified Version.
+
address@hidden
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
address@hidden
+Preserve any Warranty Disclaimers.
address@hidden enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
address@hidden
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''.  You must delete all
+sections Entitled ``Endorsements.''
+
address@hidden
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
address@hidden
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
address@hidden
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
address@hidden
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License.  Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License.  However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
address@hidden
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
address@hidden://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
address@hidden enumerate
+
address@hidden
address@hidden ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
address@hidden
address@hidden
+  Copyright (C)  @var{year}  @var{your name}.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.2
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
address@hidden group
address@hidden smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with...Texts.'' line with this:
+
address@hidden
address@hidden
+    with the Invariant Sections being @var{list their titles}, with
+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+    being @var{list}.
address@hidden group
address@hidden smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
address@hidden Local Variables:
address@hidden ispell-local-pdict: "ispell-dict"
address@hidden End:
+

Added: trunk/gnue-common/doc/manual/gnue-common.texi
===================================================================
--- trunk/gnue-common/doc/manual/gnue-common.texi       2005-05-31 22:09:38 UTC 
(rev 7556)
+++ trunk/gnue-common/doc/manual/gnue-common.texi       2005-06-01 11:26:50 UTC 
(rev 7557)
@@ -0,0 +1,1847 @@
+\input texinfo.tex    @c -*-texinfo-*-
address@hidden $Date: 2005-05-30 14:43:51 +0200 (mon, 30 may 2005) $
address@hidden %**start of header
address@hidden gnue-common.info
address@hidden version.texi
address@hidden GNUe Common @value{VERSION}
address@hidden odd
+
address@hidden
+
address@hidden SMALL BOOK version
address@hidden This edition has been formatted so that you can format and print 
it in
address@hidden the smallbook format.
address@hidden @smallbook
+
address@hidden Set following if you have the new `shorttitlepage' command
address@hidden @clear shorttitlepage-enabled
address@hidden @set shorttitlepage-enabled
+
address@hidden Set following if you want to document %default-prec and 
%no-default-prec.
address@hidden This feature is experimental and may change in future versions.
address@hidden @set defaultprec
+
address@hidden ISPELL CHECK: done, 30 May 2005 --rynik
+
address@hidden
address@hidden fn cp
address@hidden vr cp
address@hidden tp cp
address@hidden iftex
address@hidden
address@hidden fn cp
address@hidden vr cp
address@hidden tp cp
address@hidden ifinfo
address@hidden %**end of header
+
address@hidden
+
+This manual is for @acronym{GNU} Enterprise Common Library (version 
@value{VERSION},
address@hidden), the @acronym{GNU} Enterprise data storage, retrieval and 
manipulation toolbox.
+
+Copyright @copyright{} 2000, 2001, 2002, 2003, 2004, 2005 Free Software 
Foundation, Inc.
+
address@hidden
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the @acronym{GNU} Free Documentation License,
+Version 1.1 or any later version published by the Free Software
+Foundation; with no Invariant Sections, with the Front-Cover texts
+being ``A @acronym{GNU} Manual,'' and with the Back-Cover Texts as in
+(a) below.  A copy of the license is included in the section entitled
address@hidden Free Documentation License.''
+
+(a) The @acronym{FSF}'s Back-Cover Text is: ``You have freedom to copy
+and modify this @acronym{GNU} Manual, like @acronym{GNU} software.
+Copies published by the Free Software Foundation raise funds for
address@hidden development.''
address@hidden quotation
address@hidden copying
+
address@hidden These needs to be thought trough
address@hidden @dircategory GNU programming tools
address@hidden @direntry
address@hidden * GNUe Common: (GNUe Common).       @acronym{GNU} enterprise 
library.
address@hidden @end direntry
+
address@hidden shorttitlepage-enabled
address@hidden GNUe Common
address@hidden ifset
address@hidden
address@hidden GNUe Common
address@hidden The enterprise data storage, retrieval and manipulation toolbox
address@hidden @value{UPDATED}, GNUe Common Version @value{VERSION}
+
address@hidden by James Thompson
address@hidden Revised and updated by Davor Oceli�, docelic+mail.inet.hr
address@hidden Revised and updated by Niklas Rydberg
+
address@hidden
address@hidden 0pt plus 1fill
address@hidden
address@hidden 2
+Published by the Free Software Foundation @*
+59 Temple Place, Suite 330 @*
+Boston, MA  02111-1307  USA @*
address@hidden 2
address@hidden titlepage
+
address@hidden
+
address@hidden
address@hidden Top
address@hidden GNUe Common
address@hidden
address@hidden ifnottex
+
address@hidden
+* Introduction::                
+* Conditions::                  
+* Concepts::                    Basic concepts for understanding GNUe
+* Examples::                    
+
+Reference sections:
+* Data source drivers::          
+* Startup::
+* Schema:: Schema Definition Elements
+* Copying This Manual::         License for copying this manual.
+* Copying::           The @acronym{GNU} General Public License says
+                        how you can copy and share GNUe
+* Index::                       Cross-references to the text.
+
address@hidden
+ --- The Detailed Node Listing ---
+
+The Concepts of GNUe
+
+* GParser::                     
+* Triggers::                    
+* Login/Authentication::        
+* gnue.common.events::          
+
+Examples
+
+* A Sample GNUe Application::   
+* Data sources::                 
+
+A Sample GNUe Application
+
+* The Initial Code::            A complete hello world application.
+* Adding options::              Adding command line options to our application.
+* Debugging support::           Adding Debugging Output Support
+* Configuration file support::  Adding Configuration File Support
+
+Adding Command Line Option Support
+
+* Example with options::        Example with added command line options
+* Trying options::              Trying out the new command line options
+* addCommandOption::            The Function @code{addCommandOption}
+
+Adding Debugging Output Support
+
+* Example with debugging::      Our hello world application is extended to 
support debbuging messages.
+* gDebug::                      The function gDebug explained.
+
+Adding Configuration File Support
+
+* Config file support example::  Our hello world application with added 
configuration file support
+* Examine the code::            We examine the code that adds configuration 
file support
+* Testing config file support::  Testing hello world with configuration file 
support
+
+Using GNUe DataSources
+
+* Key features of datasources::  
+* Our first GDataSource application::  
+
+Our First GDataSource Application
+
+* The task::                    
+* Making sure the connection is properly setup::  
+* Defining the tables::         
+* Our application::             
+
+Data source Drivers
+
+* interbase/firebird::          
+* mysql::                       
+* PostgreSQL::                  
+* sap dB/max dB::                 
+* sqlite::                      
+
+GNUe and also supports following except for automatic schema creation
+
+* ms SQL::
+* access::
+* oracle::
+
+There is limited support for file based backends with
+
+* csv files::
+* dbase files::
+* ini files::
+
+Data source Drivers
+
+* gnue-appserver:: Using gnue-appserver as a backend.
+
+Copying This Manual
+
+* GNU Free Documentation License::  License for copying this manual.
+
address@hidden detailmenu
address@hidden menu
+
address@hidden Introduction
address@hidden Introduction
address@hidden introduction
+
address@hidden Common Library} is a set of classes and utilities designed to
+provide a large amount of basic application functionality with a
+minimal amount of effort on the part of the application developer.
+This library serves as the core for the GNUe tools, such as Forms,
+Reports, Application Server, and Designer.
+
+Some of the key features include.
+
address@hidden @bullet
address@hidden 
+A database-abstraction layer that provides support for most
+major databases. Database sources can be mixed and matched
+transparently in many cases. Changing the source of data typically
+involves changing 1 or 2 lines in a single configuration file.
address@hidden
+A built in XML-to-Object parser and Object-to-XML marshaler. You can
+rapidly define XML based file formats via python dictionaries.
address@hidden
+An RPC abstraction layer that will allow server processes to define
+their public methods once and have them available to CORBA, XML-RPC,
+SOAP, and DCOM clients.
address@hidden
+A configuration system that provides system-wide configurations as
+well as per user adjustments. System wide configuration entries can
+optionally be locked. Command line options are also easily added to
+the system.
address@hidden
+A trigger system that allows the application developer to provide
+hooks into their systems to allow easier customization using python
+methods. Triggers are provided and easily extended, customized
+name space that includes hooks to objects in memory, custom functions
+embedded in the primary app.
address@hidden
+Integrated debugging features including the integrated python
+debugger, profiler, debug levels, log files. Access to these features
+requires little to no coding on the developers part.
address@hidden
+A flexible internal event system to allow an application's sub systems
+to register for events and react upon them.
address@hidden
+Automatic generation of various levels of documentation. This
+documentation is pulled directly from the internal structures defined
+in your application and includes configuration options, run-time
+command line options, manual pages, and XML file descriptions.
+
address@hidden itemize
+
+This edition corresponds to version @value{VERSION} of GNUe Common.
+
address@hidden Conditions
address@hidden Conditions for Using GNUe Common
+
address@hidden gpl.texi
address@hidden Concepts, Examples, Conditions, Top
address@hidden The Concepts of GNUe
+
+This chapter introduces many of the basic concepts without which the
+details of GNUe will not make sense.  If you do not already know how to
+use GNUe, we suggest you start by reading this chapter carefully.
+
address@hidden
+* GParser::                     
+* Triggers::                    
+* Login/Authentication::        
+* gnue.common.events::          
address@hidden menu
+
+
+
+
address@hidden GParser
address@hidden GParser
+GParser allows the application developer to define an DTD that maps
+XML files into the object instance tree in memory.  At any time the
+tree can be converted back into its XML representation.  When coupled
+with other common features such as triggers and datasources it will
+allow a developer to rapidly create file formats that can define or
+augment selected application's behavior.
+
+Some of the key features of datasources include.
address@hidden @bullet
address@hidden
+The ability to define XML file formats via python dictionaries.
address@hidden
+Type checking of inputs
address@hidden
+XML file format validation. Single instance checking, parent/child
+relationships, required settings, default, etc are all configurable
+via the python dictionary.
address@hidden
+A flexible object tree phased initialization system via
+gnue-common's GObj.  Phases initialization allows an arbitrary number
+of passes through the object tree at at instance creation time.
address@hidden
+Several key features of gnue-common provide pre-defined GPaser
+settings making it trivial to add them to your definition.
address@hidden
+Auto-documentation.  At this time it requires light alteration of
+gnue's doc-XML-attrs-openoffice.py script.
address@hidden itemize
+
address@hidden Triggers
address@hidden Triggers
+GNUe-common triggers provide a way of allowing the application
+programmer to define event hooks in their application that can run
+arbitrary python code defined external to the application.  During
+execution, custom name space is generated for triggers that provide
+additional features and functions to the trigger programmers without
+requiring them to learn the internals of your application.  When
+utilized with gnue-common's GObj based objects and Gparser, the
+trigger name space is easily populated with handles to all object
+instances in the GObj tree.
+
address@hidden Login/Authentication
address@hidden Login/Authentication
address@hidden login
address@hidden Authentication
+
+By default, GNUe clients look at a database connection, determine what
+fields it needs in order to login (e.g., username and password), and then
+asks its platform/interface dependent login handler to prompt the user for
+this information. Once returned, the client connects to the database using
+this information.
+
+If needed, you can intercept a client's normal login handler to add your
+own behavior.
+
address@hidden
+* Why change the login?::       
+* login explanation::           
+* Creating custom authenticator::  
+* MyPostgresAuthenticator.py::  
address@hidden menu
+
address@hidden Why change the login?
address@hidden Reasons for changing the login behavior
+
+Sometimes it is not enough to prompt for the @samp{database} login.  Perhaps
+you want finer control over logins, or simply need to authenticate against
+something besides the database.
+
+You might want to authenticate against an @acronym{NIS} source, 
@acronym{LDAP}, or some custom
+source.  Maybe you have many users and want to authenticate against rows in
+a database table and have the actual database login name/password be a
+common one that no one knows; i.e., while users Jason and James might log
+in using @samp{jason} and @samp{james}, they might both connect to the 
database as
address@hidden  Since you may not trust James, you only want him to know
+that he is logging in as @samp{james} and never know that he is being connected
+as @samp{commonuser}.
+
address@hidden login explanation
address@hidden A little explanation of how logins work:
+
address@hidden
+
address@hidden
+   A client needs to initialize a connection to a database, so it passes
+   GNUe-Common a description of the database and asks for it to connect.
address@hidden
+   GNUe-Common looks at the database description, determines what values
+   are needed to connect (usually, username and password).
address@hidden
+   GNUe-Common creates an instance of (or uses an existing instance of)
+   gnue.common.GLoginHander.LoginHandler, or if the client provides a
+   more advanced login handler (e.g., GNUe Form's graphical handler), an
+   instance of this.
address@hidden
+   GNUe-Common calls LoginHandler.getLogin(), passing it basic information
+   about the needed connection and a list of values that login handler
+   should provide (i.e., '_username' & '_password').
address@hidden
+   GNUe-Common uses the results of the call to LoginHandler.getLogin() to
+   create a connection to the database.
address@hidden enumerate
+
+Now, if needed, you can create an Authenticator class that basically
+intervenes in between steps #3-4 above and provide your own functionality.
+
+If all goes well, your login handler will be used the next time you log in.
+
address@hidden Note
+     Almost the only restriction placed on getLogin's functionality is
+     that it must return a hash containing at least the values requested
+     when getLogin was called, using the value id's supplied. Your code,
+     in theory, can do whatever it needs in order to return these values.
+
+     HOWEVER: Even though it is possible, it is NOT recommended that you
+     try to write your code to prompt for the values.  It is HIGHLY
+     recommended that you return values in the getLoginFields method so
+     LoginHandler.getLogin can prompt for input.  The LoginHandler will
+     know how to handle the current user's environment (i.e., should it
+     display a GTK login box, generate HTML for a login box, not display
+     a box at all, but prompt using good ol' fashioned text prompts?)
+     It is quite extensible.  If you need to prompt for more fields than
+     simply Username and Password, then simply add a definition to your
+     requiredFields tuple and let the LoginHandler's getLogin prompt for
+     you.
address@hidden quotation
+
+There are three steps to adding a custom authenticator:
address@hidden
address@hidden
+   Create (or copy) a Python file that implements an Authenticator.
+   An Authenticator contains a class called Authenticator, which has
+   two methods, getRequiredFields() and login().  See the example below
+   for details on what's expected from these two methods.
address@hidden
+   Place this file in either your Python search path, or in a
+   path specified by ImportPath (in the [common] section of gnue.conf)
address@hidden
+   In your connections.conf file, add a custom_auth parameter that
+   is the name of the file (without the path or .py extension):
address@hidden
+[myconn]
+adapter = psycopg
+host = localhost
+dbname = mydb
+custom_auth = MyPostgresAuthenticator
address@hidden example
address@hidden enumerate
+
address@hidden Creating custom authenticator
address@hidden Creating a custom authenticator
+
+A slightly more complicated example. You have a table in one of your databases
+called "users", that has a user and password field.
+
+Your users will connect to the database using the username and password:
address@hidden  and @samp{dbPassword}.
+
+You, however, want them to use their own username and password to be
+authenticated, but after getting authenticated, the database only cares
+about the real "dbUser" and "dbPassword".
+
+
address@hidden MyPostgresAuthenticator.py
address@hidden File: MyPostgresAuthenticator.py
+
address@hidden
+import psycopg
+from gnue.common.GConnections import LoginError
+
+class Authenticator:
+  #
+  # getLoginFields is passed an list consisting of:
+  #   Fields to Input:
+  #      Attribute Name, Label/Description, Is Password?
+  #
+  #   This list is a list of the values the dbdriver
+  #   expects to get back in order to login.
+  #
+  #   It should return a similarly formatted list that
+  #   tells the LoginHandler what values need to be
+  #   prompted for. (Typically, _username and _password)
+  #   If nothing should be prompted (e.g., you have a
+  #   certificate) then return () (an empty list).
+  #
+  def getLoginFields(self, dbRequiredFields):
+    return dbRequiredFields
+
+  #
+  # Authenticate the user given the values prompted for.
+  # If the information is incorrect, then raise
+  # gnue.common.GConnections.LoginError
+  #
+  # It should return a dictionary of @{Attribute Name: address@hidden
+  #
+  def login(self, loginData):
+    conn = psycopg.connect(user="theValidator",
+                 password="hotmomma",
+                 dbname="logins",
+                 host="localhost"')
+    cursor = conn.cursor()
+    results = cursor.execute (
+        'select 1 from users where username=%s and password=%s',
+        (loginData['_username'],
+         loginData['_password']) )
+    if not cursor.fetchone():
+      raise LoginError
+    else:
+      loginData['_username'] = 'dbLogin'
+      loginData['_password'] = 'dbPassword'
+
+    return loginData
address@hidden example
+
address@hidden Note
+there are no hard and fast rules about what can go into the
+connections.conf file.  If your authenticator needs more information
+stored in connections.conf, it is fine to do so.
address@hidden quotation
+
+However, to avoid name space collisions, you should probably prefix
+any custom connection.conf entries with common prefix. For example,
+if you are writing an NIS adapter, you should prefix entries in
+connections.conf like:
+
address@hidden
+  auth_nis_domain = MYDOMAIN
address@hidden example
+instead of something like:
address@hidden
+  domain = MYDOMAIN
address@hidden example
+More examples:
address@hidden
+  auth_ldap_*
+  auth_pg_*
+  auth_mysql_*
+  auth_kerberos_*
+  auth_custom_*
address@hidden example
+
+If you have written a customized login handler using backends not currently
+in our samples file (i.e., against NIS, Kerberos, LDAP, etc) and would like
+to donate your example for others to learn from, please email it to:
+
+       info@@gnue.org
+
address@hidden gnue.common.events
address@hidden Overview of gnue.common.events
+
+There are three components to the GNUe event model:
+
+
+
address@hidden
+* EventController::             
+* EventAware::                  
+* Event::                       
address@hidden menu
+
address@hidden EventController
address@hidden EventController
+
+Every application instance needs an EventController.  This is, for lack
+of a better word, the event multiplexor.  It receives an event request
+and sends it out to all the listeners.
+
address@hidden EventAware
address@hidden EventAware
+
+Any object that can either send or receive an event should subclass 
+EventAware. EventAware needs to be passed the "EventController" instance. 
+The EventAware class serves basically as a proxy between the EventController
+and your object. EventAware exposes two methods: 
+
+
+   * registerEventListeners(events)
+
+     This method takes a dictionary containing, as its keys, all of the 
+     "Events" (Case-sensitive!!!) that this object responds to.  The
+     "value" of the dictionaries are pointers to methods that are called.
+
+     For example, suppose you have the following class:
+
+       class DonutFactory(EventAware):
+
+         # Call me when we're low on donuts
+         def outOfDonuts(self, event):
+           print "Yo, Charlie! We need more donuts"
+
+         # Call me when we can go home
+         def closingTime(self, event):
+           print "Time to go home..."
+
+
+     And you want to listen in for the 'DonutLowWarning' and 'ClosingTime'
+     events.  Your __init__ would look something like:
+
+         # Initialize our DonutFactory class
+         def __init__(self, eventController):
+           EventAware.__init__(self, eventController)
+
+           self.registerEventListeners (
+              @{ 'DonutLowWarning': outOfDonuts,
+                'ClosingTime': closingTime @} )
+
+
+     Now, whenever any EventAware object within your application dispatches
+     the "DonutLowWarning" event, your outOfDonuts() method will be called. 
+     Note that event methods should accept a single argument, which will be
+     an Event() object. 
+   
+
+   * dispatchEvent(event)
+   
+     This method takes an Event() instance and passes it to the 
+     EventController for propagation throughout the event model. 
+     
+     For example, take our donut factory class.  When fresh donuts are 
+     available, it might dispatch the 'FreshDonutsReady': 
+
+           self.dispatchEvent (Event('FreshDonutsReady'))
+
+     An object dispatching a particular event does not need to be registered
+     to receive that event in order to dispatch it.  In other words,
+     DonutFactory doesn't care what happens when the FreshDonutsReady event
+     is raised.
+     
+     As of GNUe-Common 0.5.0, dispatchEvent can be passed a string, followed 
+     by an arbitrary number of named parameters.  This will implicitly create
+     an event.  For example, the following two statements are now equivalent: 
+
+           self.dispatchEvent(Event('FreshDonutsReady',quantity=48))
+
+           self.dispatchEvent('FreshDonutsReady',quantity=48)
+
+     If you need a result or an error code from an event, you will still need
+     to explicitly create an event to pass to dispatchEvent. 
+
+
address@hidden Event
address@hidden Event
+
+An event is the actual event object passed back and forth between the event
+listeners.
+
+Any parameters passed to the Event's __init__ are added as attributes of the
+event. The first attribute, however, should always be the case-sensitive
+event name.  For example:
+
+   Event('MyEvent', color='Blue', x=1, y=2)
+
+Would create an event called MyEvent, with the following properties:
+
+   Event.x = 1
+   Event.y = 2
+   Event.color = 'Blue'
+
+
+An event has the following methods/attributes:
+
+   Event.__result__     If the event is a 2-way event (i.e., a return value
+   Event.setResult()    is expected by the object issuing dispatchEvent,
+   Event.getResult()    then the listener capable of returning the value
+                        should set this or call Event.setResult(value).
+
+
+   Event.__error__      If the dispatcher supports the concept of "errors",
+   Event.__errortext__  a listener can set this value to 1 if an error
+   Event.setError()     occurred. Calling of other listeners stops once
+                        Event.__error__ is set.  If an error text message
+                        needs to be returned, __errortext__ can also be set
+                        to a string value.
+
+                        Event.__error__ is set to true when Event.setError()
+                        is called.  Event.setError takes an optional string
+                        parameter that __errortext__ is set to.
+
+
+   Event.__dropped__    If no further processing should happen to this event,
+   Event.drop()         then the event listener can call Event.drop(), which
+                        will set Event.__dropped__ to true.
+
+                        If Event.__error__ is set, Event.__dropped__ has no
+                        meaning as a drop is implied.
+
+
+
+
address@hidden Examples
address@hidden Examples
address@hidden simple examples
address@hidden examples, simple
+
+Now we show and explain three sample programs written using GNUe.
address@hidden
+You can copy these examples out of the Info file and into a source file
+to try them.
address@hidden ifinfo
+
address@hidden
+* A Sample GNUe Application::   
+* Data sources::                 
address@hidden menu
+
address@hidden A Sample GNUe Application
address@hidden A Sample GNUe Application
address@hidden simple example
address@hidden example, simple
+
+No tutorial for a programming environment would be complete without a
+functional Hello World application. In this chapter, we will create
+our hello world application. We will then extend that application to
+use a few of the more basic GNUe-Common features.
+
address@hidden
+You can copy these examples out of the Info file and into a source file
+to try them.
address@hidden ifinfo
+
address@hidden
+* The Initial Code::            A complete hello world application.
+* Adding options::              Adding command line options to our application.
+* Debugging support::           Adding Debugging Output Support
+* Configuration file support::  Adding Configuration File Support
address@hidden menu
+
address@hidden The Initial Code
address@hidden The Initial Code
address@hidden GClientApp, example
+Lets take a look at our complete hello world application. Create a file
+named helloworld with the following contents.
address@hidden
+#
+#Import the base application support
+#
+from gnue.common.apps.GClientApp import *
+
+#
+# Define our application
+#
+class Hello(GClientApp):
+  VERSION = "0.0.1"
+  COMMAND = "helloworld"
+  NAME = "Hello World"
+  USAGE = GClientApp.USAGE
+  SUMMARY = _("App to display the text Hello World .")
+  AUTHOR = "GNU Enterprise Project"
+  EMAIL = "info@@gnue.org"
+  REPORT_BUGS_TO = "Report bugs to info@@gnue.org."
+
+  def run(self):
+    print "Hello World!"
+
+if __name__ == '__main__':
+  Hello().run()
address@hidden example
+
+After you have created your helloworld file, proceed to execute it.
address@hidden
+$ @kbd{python helloworld}
+Hello World!
+$ 
address@hidden example
+That isn't very much output for such a large amount of code. What's
+going on here?  Let's rerun the application using the following
+command.
address@hidden
+$ @kbd{python helloworld --help}
+
+Hello World
+Version 0.0.1
+
+GNUe Common Version 0.5.14.99
+
+Usage:  helloworld [options]
+
+
+App to display the text Hello World .
+
+Available command line options:
+
+  --connections <loc>
+              Specifies the location of the connection definition file. <loc>
+              may specify a file name
+              (/usr/local/gnue/etc/connections.conf),or a URL location
+              (http://localhost/connections.conf).If this option is not
+              specified, the environment variable GNUE_CONNECTIONS is
+              checked.If neither of them is
+              "/home/d99rynik/gnue/etc/connections.conf" is used as a
+              default.
+  --debug-file <filename>
+              Sends all debugging messages to a specified file (e.g.,
+              "--debug-file trace.log" sends all output to "trace.log")
+
+  --debug-level <level>
+              Enables debugging messages. Argument specifies the level of
+              messages to display (e.g., "--debug-level 5" displays all
+              debugging messages at level 5 or below.)
+
+  --help      Displays this help screen.
+
+  --help-config
+              Displays a list of valid configuration file entries, their
+              purpose, and their default values.
+
+  --help-connections
+              Display help information related to database connections,
+              including a list of available drivers.
+
+  --help-dev  Display all options of interest to core developers.
+
+  --silent    Displays no output at all.
+
+  --version   Displays the version information for this program.
+
+
+Report bugs to info@@gnue.org.
+
+$
address@hidden example
+Do all those options really work?  Yes. Our helloworld application
+supports an integrated debugger, profiler, and a fair bit of self
+documentation. Now we will look at the various sections of code and
+explain their function.
address@hidden
+#
+#Import the base application support
+#
+from gnue.common.apps.GClientApp import *
+
+#
+# Define our application
+#
+class Hello(GClientApp):
address@hidden example
+GNUe Common provides two different classes, GClientApp or
+GserverApp. These classes, while optional, provide a great deal of
+functionality to applications that are based upon them. Almost all
+official GNUe applications are based upon one of these two
+classes. GClientApp should be used when your application will not be
+required to run as a daemon process. If you have such a requirement
+then you will use GserverApp. Our helloworld application is based upon
+GClientApp.
address@hidden
+  VERSION = "0.0.1"
+  COMMAND = "helloworld"
+  NAME = "Hello World"
+  USAGE = GClientApp.USAGE
+  SUMMARY = _("App to display the text Hello World .")
+  AUTHOR = "GNU Enterprise Project"
+  EMAIL = "info@@gnue.org"
+  REPORT_BUGS_TO = "Report bugs to info@@gnue.org."
address@hidden example
+These lines are used to set default values displayed on various help
+screens and documentation formats. Looking closer at the SUMMARY
+definition you will notice the text string is surrounded by _(). GNUe
+Common contains full support for i18n1. For now we will not be
+examining that support, it will be saved for a later chapter.
address@hidden
+  def run(self):
+    print "Hello World!"
+
+if __name__ == '__main__':
+  Hello().run()
address@hidden example
+
address@hidden Adding options
address@hidden Adding Command Line Option Support
address@hidden Command Line Option Support
address@hidden Options
+
+Our helloworld is a success but it seem seems to be missing
+something. GNUe developers are scattered all over the globe, but
+helloworld only displays it's message English. Lets make a few changes
+to the code to add the following features.
address@hidden @bullet
address@hidden
+The word world will be replaced with any name that is passed in it on
+the command line.
address@hidden
+An -w(--welcome) option will be added to toggle on the printing of the
+word Welcome
address@hidden
+An -L(--lang) option will be added to allow the user to choose the
+language in which we display our welcome.2 We will support English and
+Maori as our valid languages.
address@hidden itemize
address@hidden
+* Example with options::        Example with added command line options
+* Trying options::              Trying out the new command line options
+* addCommandOption::            The Function @code{addCommandOption}
address@hidden menu
+
address@hidden Example with options
address@hidden Example with added command line options
+Here is the new code
address@hidden
+with the bolded sections containing the altered code
address@hidden ifnotinfo
+. In all our examples, it is important that you do not accidentally
+insert TAB characters or misalign the lines, or you'll run into
+compile-time errors.
address@hidden
address@hidden
+#
+#Import the base application support
+#
+from gnue.common.apps.GClientApp import *
address@hidden group
+
address@hidden
+#
+# Define our application
+#
+class Hello(GClientApp):
+  VERSION = "0.0.1"
+  COMMAND = "helloworld"
+  NAME = "Hello World"
+  USAGE = GClientApp.USAGE + ' [name]'
+  SUMMARY = _("App to display the text Hello World .")
+  AUTHOR = "GNU Enterprise Project"
+  EMAIL = "info@@gnue.org"
+  REPORT_BUGS_TO = "Report bugs to info@@gnue.org."
address@hidden group
+
address@hidden
address@hidden
+  def __init__ (self):
+    self.addCommandOption ('welcome_option', 'w', 'welcome',
+      help = _("Display the welcome message."))
+
+    self.addCommandOption ('lang_option', 'L', 'lang', 
+      argument = 'language', 
+      default = 'english', 
+      help = _("The language to print welcome "
+               "Valid values: english, maori"))
+
+    GClientApp.__init__ (self)
+}
address@hidden group
+
address@hidden
+  def run(self):
+    greetings = @{ 'english' : 'Welcome',
+                  'maori' : 'Kia Ora'
+                  @}
+
+    if self.ARGUMENTS:
+        print "Hello %s!" % self.ARGUMENTS[0]
+    else:
+        print "Hello World!"
+
+    if self.OPTIONS['welcome_option']:
+        print greetings[self.OPTIONS['lang_option']];
address@hidden group
+
address@hidden
+if __name__ == '__main__':
+  Hello().run()
address@hidden group
address@hidden example
+
address@hidden Trying options
address@hidden Trying out the new command line options
address@hidden
+Let's rerun the application using the following command.
address@hidden
+$ @kbd{python helloworld --help}
address@hidden example
address@hidden group
+
address@hidden
+You will notice a few more options listed in the help screen and on man pages 
generated via the -generate-man-page option.
+
+These are the new options we just added:
+
address@hidden
address@hidden
+  --lang <language>, -L
+              The language to print welcome Valid values: english, maori
address@hidden group
+
address@hidden
+  --welcome, -w
+              Display the welcome message.
address@hidden group
address@hidden example
+
address@hidden
+Now lets try running helloworld with a few different options.
+
address@hidden
address@hidden
+$ @kbd{python helloworld}
+Hello World!
+$ @kbd{python helloworld -w}
+Hello World!
+Welcome
+$ @kbd{python helloworld -w -L maori}
+Hello World!
+Kia Ora
+$ @kbd{python helloworld.py -w -L maori Andrew}
+Hello Andrew!
+Kia Ora
+$
address@hidden group
+
address@hidden example
+
+
+
address@hidden addCommandOption
address@hidden The Function @code{addCommandOption}
address@hidden addCommandOption
+The key to adding options is the code
+
address@hidden
address@hidden
+    self.addCommandOption ('welcome_option', 'w', 'welcome',
+      help = _("Display the welcome message."))
address@hidden group
+
address@hidden
+    self.addCommandOption ('lang_option', 'L', 'lang', 
+      argument = 'language', 
+      default = 'english', 
+      help = _("The language used to print welcome "
+               "Valid values: english, maori"))
address@hidden group
address@hidden example
+
address@hidden addCommandOption self name shortOption longOption acceptArgument 
default argumentName help category action argument
+You call the function @code{addCommandOption} to add an entry to your 
applications list of valid options.
+
+Parameters:
address@hidden @var
address@hidden name
+Key name that will be available  in the self.OPTION dictionary when the 
application is executing.
+
address@hidden shortOption
+Single letter to assign to this option
+
address@hidden longOption
+Long option name.  The is prepended with -- on the command line.
+
address@hidden acceptsArgument
+True if the option requires a value to be assigned from the command line.
+
address@hidden default
+Default value if the option is not passed in via the command line.
+
address@hidden argumentName
+Same as argument. argument overrides argumentName.
+
address@hidden help
+Description of the option displayed in help text.
+
address@hidden category
+ Used to create groups of command options, where "base", "dev", "connections" 
and "general" are predefined.
+There are the options -help-dev and
+--help-connections to give a special help-text for these option groups.
address@hidden table
address@hidden defun
+
+The function @code{addCommandOption} should be called in the constructor 
@code{__init__} of the @code{GClientApp} class and must be followed by a call 
to @code{GClientApp.__init__} to take effect.
+
+
+
address@hidden Debugging support
address@hidden Adding Debugging Output Support
+It is often handy to track what is going on inside a running copy of a 
program.  You could start helloworld using the --interactive-debugger option 
and be dropped directly into python's debugger.  This is a powerful way to 
track what is happening inside your application but it can also be inconvenient 
for simple debugging tasks.  It is also a bit too much to ask of an  end user 
that is requiring technical assistance. This is when GNUe's debugging support 
is useful.
address@hidden
+* Example with debugging::      Our helloworld application is extended to 
support debbuging messages.
+* gDebug::                      The function gDebug explained.
address@hidden menu
+
address@hidden Example with debugging
address@hidden Our helloworld application is extended to support debbuging 
messages
+
+Let's tweak our program a bit.  In the interest of saving trees we'll only 
show small pieces of code
address@hidden
+ with the new parts in bold
address@hidden ifnotinfo
+.
+
address@hidden
address@hidden
+#
+#Import the base application support
+#
+from from gnue.common.apps.GClientApp import * @r{# Here we load GNUe Common's 
Gdebug system.}
+if self.ARGUMENTS:
+  @b{gDebug(5,'The value to be printed is %s' % self.ARGUMENTS[0])}
+  print "Hello %s!" % self.ARGUMENTS[0]
+else:
+  @b{gDebug(5,'The default value will be printed')}
+  print "Hello World!"
address@hidden group
address@hidden example
+
address@hidden gDebug
address@hidden The function @code{gDebug}
address@hidden gDebug level message dropToDebugger
+Will output to either a screen or a file depending upon the options passed to 
the program at start.
+
+Parameters:
address@hidden @var
address@hidden level
+The debug-level the message will be logged in.
address@hidden message
+The message to be logged. 
address@hidden dropToDebugger
+If set to True, Python's interactive debugger will be switched to trace mode. 
This requires that setDebugger has been called before.
address@hidden table
address@hidden defun
+
+The GNUe project typically uses these debug-levels:
address@hidden @asis
address@hidden 1: Warnings
+things that shouldn't happen when everything was perfect
+e.g. depreciation warning, Unicode conversion warning etc.
address@hidden 2: info about system environment
+python version, command line args, environment variables
address@hidden 3: SQL commands sent to the backend or similar information for 
non-SQL backends.
address@hidden 4-6: can be used by the tools like forms, reports, appserver
address@hidden 7-9: can be used by common
address@hidden table
+To see different level debug messages from the GNUe framework, try running the 
program with  --debug-level 2, --debug-level 1,3 or --debug-level 1-10.
+
+
+
address@hidden Configuration file support
address@hidden Adding Configuration File Support
+It is often nice to allow application options to be set at various levels.  
GNUe Common supports a configuration file system with the following features
address@hidden @bullet
address@hidden
+Application default settings in the code.
address@hidden
+A system wide configuration file that can be overridden by individual user 
configuration files.
address@hidden
+A system wide configuration file that can not be overridden by individual user 
configuration files.
address@hidden
+Auto-documentation support.  All GNUe Common apps support a command line 
option (--help-config) that displays all valid configuration file options and 
their default values.
address@hidden itemize
+
+We will now alter our helloworld application to allow users to replace the 
world Hello with the text of their choice.
+
address@hidden
+* Config file support example::  Our helloworld application with added 
configuration file support
+* Examine the code::            We examine the code that adds configuration 
file support
+* Testing config file support::  Testing helloworld with configuration file 
support
address@hidden menu
+
address@hidden Config file support example
address@hidden Our helloworld application with added configuration file support
+
+Rather than continue to print only pieces of the code we will again display a 
complete copy of our application.
address@hidden
+All the current changes are in bold.
address@hidden ifnotinfo
+
address@hidden
address@hidden
+#
+#Import the base application support
+#
+from gnue.common.apps.GClientApp import *
address@hidden gnue.common.formatting import GTypecast}
+
address@hidden group
address@hidden
+
+#
+# Define our application
+#
+class Hello(GClientApp):
+  VERSION = "0.0.1"
+  COMMAND = "helloworld"
+  NAME = "Hello World"
+  USAGE = GClientApp.USAGE + ' [name]'
+  SUMMARY = _("App to display the text Hello World .")
+  AUTHOR = "GNU Enterprise Project"
+  EMAIL = "info@@gnue.org"
+  REPORT_BUGS_TO = "Report bugs to info@@gnue.org."
+  CONFIGFILE="ourapp.conf"
+
address@hidden group
address@hidden
+
+  def __init__ (self):
+
+    self.addCommandOption ('welcome_option', 'w', 'welcome',
+      help = _("Display the welcome message."))
+
+    self.addCommandOption ('lang_option', 'L', 'lang', 
+      argument = 'language', 
+      default = 'english', 
+      help = _("The language to print welcome "
+               "Valid values: english, maori"))
+
+    @b{ConfigOptions = (
+          @{ 'Name'       : 'greetingText',
+            'Type'       : 'Setting',
+            'Comment'    : 'Use the basic editor for triggers',
+            'Description': 'Use the basic editor for triggers',
+            'Typecast'   : GTypecast.text,
+            'Default'    : 'Hello' @},
+          )}
+
+    GClientApp.__init__ (address@hidden, application="helloworld",
+                         defaults=ConfigOptions})
+
address@hidden group
address@hidden
+
+  def run(self):
+    greetings = @{ 'english' : 'Welcome',
+                  'maori' : 'Kia Ora'
+                                    @}
+
+    if self.ARGUMENTS:
+      gDebug(5,'The value to be printed is %s' % 
+        self.ARGUMENTS[0])
+      print @b{"%s %s!" % (gConfig('greetingText'),self.ARGUMENTS[0])}
+    else:
+      gDebug(5,'The default value will be printed')
+       
+
+    if self.OPTIONS['welcome_option']:
+      print greetings[self.OPTIONS['lang_option']];
+
address@hidden group
address@hidden
+
+if __name__ == '__main__':
+  Hello().run()
address@hidden group
address@hidden example
+
address@hidden Examine the code
address@hidden We examine the code that adds configuration file support
+
+Lets look at the various sections of added code.
+
address@hidden
+from gnue.common.formatting import GTypecast
address@hidden example
+
+This imports a basic type casts library that we'll be using to define the 
types of configuration values we'll expect.
+
address@hidden
address@hidden
+        ConfigOptions = (
+            @{ 'Name'       : 'greetingText',
+              'Type'       : 'Setting',
+              'Comment'    : 'Use the basic editor for triggers',
+              'Description': 'Use the basic editor for triggers',
+              'Typecast'   : GTypecast.text,
+              'Default'    : 'Hello' @},
+            )
address@hidden group
address@hidden example
+
+Here we are defining a python dictionary of valid configuration file options.  
In this case we only have 1 option named greetingText, it is of type text, and 
defaults to hello.  The type and comment values are currently unused.  The 
description value is used to generating help text when the user runs the 
application with --help-config.
+
address@hidden
address@hidden
+        GClientApp.__init__(self, application="helloworld",
+                            defaults=ConfigOptions)
address@hidden group
address@hidden example
+
+Now we initialize our GClientApp parent, passing in the configuration options 
via the @code{defaults=ConfigOptions}.  By doing this the application will do 
three things.
address@hidden
address@hidden
+It loads the default value defined in the greetingText definition.
address@hidden
+It will scan for a /etc/gnue/ourapp.conf file. 
address@hidden
+It will load the file and look in the [DEFAULT] section for a value of 
'greetingText', if found it will store the value.
+It will then look for a [helloworld] section in the same file.  If found it 
will replace any previous value stored for greetingText
address@hidden
+It will next scan for a $HOME/.gnue/ourapp.conf file. If found it will perform 
the same scans as it did on the system scans in step 1.
+4.Finally it will look for a /etc/gnue/ourapp.conf.fixed.  If found it will 
perform the same scans as it did on the system scans in step 1 and 2.  Since 
this file is scanned last it has the effect of locking any settings the site 
admin has decided to prevent users from overriding.
address@hidden enumerate
+
+Next, we want to print our greeting text.
address@hidden
+          print "%s %s!" % (gConfig('greetingText'),self.ARGUMENTS[0])
address@hidden example
+
+Here  we use the global function @code{gConfig()} to pull the derived value of 
greetingText from the configuration system.
+
address@hidden Testing config file support
address@hidden Testing helloworld with configuration file support
+
+Now, lets test. We will need to create the @file{ourapp.conf} file in the 
@file{etc} directory with the following contents.
+
address@hidden
address@hidden
+[DEFAULT]
+greetingText = Howdy
address@hidden group
address@hidden example
+
+Now lets run it.
+
address@hidden
address@hidden
+$ @kbd{python helloworld -w bob}
+Howdy bob!
+Welcome
address@hidden group
address@hidden example
+
+Lets tweak that @file{ourapp.conf} file a bit to add a more specific 
configuration section for this application.
+
address@hidden
address@hidden
+[DEFAULT]
+greetingText = Howdy
+
+[helloworld]
+greetingText = Greetings
address@hidden group
address@hidden example
+
+Now rerun the application 
+
address@hidden
address@hidden
+$ @kbd{python helloworld -w bob}
+Greetings bob!
+Welcome
address@hidden group
address@hidden example
+
+The format of the users @file{$HOME/.gnue/ourapp.conf} and 
@file{/etc/gnue/ourapp.conf.fixed} are the exact same as above. Try creating 
both these files and seeing how they interact.
+A few things to note about the application above. More than one application 
can use the same @code{CONFIGFILE} setting.  This allows families of 
applications to share a single config file.  Each application can take 
advantage of the shared @code{[DEFAULT]} section yet have their own sections 
defined by the @code{application="name"} they set during initialization.
+
address@hidden Data sources
address@hidden Using GNUe DataSources
+Introduction GNUe DataSources provide a mapping between a
+vendor-specific data storage method, most commonly a table, and a
+generic representation of that source of information.  A GNUe
+DataSource hides the implementation of the storage of data from the
+developer.  Mapping the generic manipulation of data to the
+appropriate vendor specific code needed to act upon the data.  In the
+case of relational databases this would usually be SQL.  But in
+dealing with Object Oriented data stores like GNUe-appserver it would
+be the appserver's custom protocol.  The advantage of this approach is
+that an application developer you typically do not need to concern
+yourself with how the data is stored.  It's worth noting that while
+work is almost completed to allow the application programmer a method
+of using SQL in the creation of the datasource, it is not the
+preferred method of using them as it leads to the possibility of
+vendor lock-in.
address@hidden
+* Key features of datasources::  
+* Our first GDataSource application::  
address@hidden menu
+
address@hidden Key features of datasources
address@hidden Some of the key features of datasources
address@hidden @bullet
address@hidden
+Vendor neutral storage and retrieval of data.  Backends can range from object 
servers, to relational databases, to flat files.  GNUe-common hides the 
differences from the application programmer.  
address@hidden
+Master/Detail relationships.  This is the equivalent to linking tables in a 
relational database via primary/foreign key relationships.  An application 
programmer can arbitrarily link multiple datasources to other datasources in 
complex relationships. Multiple detail datasources can link to a single master. 
 Detail can also server as masters of other datasources.  Navigation in the 
master datasource forces all details to keep in sync.
address@hidden
+Simple record caching.  When loading huge datasets the datasource only loads 
records upon demand.  Records are loaded in a quantity defined by the 
programmer to allow them to tailor the response time vs hits on the backend 
storage medium.
address@hidden
+XML representation.  DataSources provide their own XML when using our 
XML-to-Object parser and Object-to-XML marshaler.   Adding support for defining 
datasources along with conditionals in XML files requires only a few lines of 
code in your application.
address@hidden itemize
+
address@hidden Our first GDataSource application
address@hidden Our First GDataSource Application
+Lets start the introduction to gnue-common's GDataSources with a simple 
program.
address@hidden
+* The task::                    
+* Making sure the connection is properly setup::  
+* Defining the tables::         
+* Our application::             
address@hidden menu
+
address@hidden The task
address@hidden The Task
+ We have a web server that takes registration information from contestants and 
stores it in a postgreSQL table.  We want to transfer that registration 
information from the web server to our more secure internal server.  Since a 
separate program will process the data, weed out duplicates, then move the data 
into the official list of registered applicants, we will not have to deal with 
those situations.
+Before we begin with the application, we'll take a moment to make sure GNUe is 
setup properly and create some gnue-schema files that will generate the SQL we 
require.
+
address@hidden Making sure the connection is properly setup
address@hidden Making Sure the Connection is Properly Setup
+The first thing we should do is ensure that our connections are
+properly defined for use in GNUe.  Assuming that GNUe has been
+installed in @file{/usr/local/gnue} we need to edit the file located at
address@hidden/usr/local/gnue/etc/connections.conf} We will add the following
+lines if they do not already exist.
+
address@hidden
address@hidden
+[prod]
+comment = Production DB
+provider = psycopg
+host = rdbms.example.com
+dbname = prod
+username = USERNAME
+password = PASSWORD
+
address@hidden group
address@hidden
+
+[web]
+comment = Web DB
+provider = psycopg
+host = www.example.com
+dbname = web
+username = USERNAME
+password = PASSWORD
address@hidden group
address@hidden example
+
+Lets break down the first entry @code{[prod]} in the file. 
+
address@hidden
+
+This is the name of the GNUe connection.  GNUe connection names are used 
throughout GNUe as a simple way to reuse connection information.
+
address@hidden = Production DB}
+
+A more friendly text description of the connection.  This is used in cases 
like GNUe-Designer's Wizards when it is prompting the user for the connection 
to use.
+
address@hidden = psycopg}
+
+The provider name is a name assigned by GNUe to specify a vendor specific 
driver to use. In our case we are using the psycopg driver to access a 
postgreSQL database.   See Appendix B for a list of valid drivers and 
corresponding GNUe provider names.
+
address@hidden = rdbms.example.com}
+
+The hostname or IP address of the machine hosting our postgreSQL database.
+
address@hidden = prod}
+
+The name of the postgreSQL database to use.
+
address@hidden = USERNAME}
+
+Username to use for database connection.
+
address@hidden = PASSWORD}
+
+Password to use for a database connection. Leaving @code{password =} for 
password-less connection is possible.
+It's worth noting that not all providers require the same settings.  Appendix 
B lists the various supported databases and their specific connection.conf 
settings.  For a more up to date listing visit 
@uref{http://www.gnuenterprise.org/tools/common/databases}.
+
address@hidden Defining the tables
address@hidden Defining the tables with gnue-schema
+While gnue will work quite well with pre-existing tables we will assume that 
we are going to need to create the registration table from scratch.  Rather 
than generate the SQL to create the tables by hand I will instead use a 
gnue-common utility known as gnue-schema.  gnue-schema allows you to take a 
table definition defined using an XML file and translate it to the :vendor 
specific commands needed to generate the table.  This process doesn't have to 
result in any specific format.  For example, gnue-schema has a vendor target of 
HTML that produces an HTML page describing your table structure for 
documentation purposes.
+Please Note: At the time of this writing gnue-schema is still a relatively new 
addition to gnue-common.  As such it does not yet have output for all 
gnue-common supported vendor backends.  You can get a list of supported 
backends by issuing the following command
+
address@hidden
+$ @kbd{gnue-schema --help-connections}
address@hidden example
+If you're backend isn't supported then I would suggest picking one of the 
existing ones and editing the code to match your needs.  Alternatively you 
could help us add support for your backend.  :)
+Lets look at the @file{registration.gsd} file we will be using to create our 
table structure.  
+
address@hidden
+<?xml version="1.0"?>
+<schema>
+  <tables>
+    <!--
+      *********************************
+      Registration table
+      *********************************
+    -->
+    <table name="registration">
+      <fields>
+        <field name="registration_id" type="key" 
+         defaultwith="serial" nullable="N"/>
+        <field name="name"  length="50" type="string" nullable="N" />
+        <field name="address" type="string" length="50"/>
+        <field name="address2" type="string" length="50"/>
+        <field name="city" type="string" length="50"/>
+        <field name="state" type="string" length="30"/>
+        <field name="zip" type="string" length="20"/>
+        <field name="zip4" type="string" length="4"/>
+        <field name="phone_number" type="string" length="30"/>
+      </fields>
+      <primarykey name="pk_registration_id">
+        <pkfield name="registration_id"/>
+      </primarykey>
+      <constraints/>
+      <indexes/>
+    </table>
+  </tables>
+</schema>
address@hidden example
+
+ While we will cover the gsd format in greater detail in a later chapter we 
will take a moment to cover one of the less obvious lines.  
+
address@hidden
+<field name="registration_id" type="key" 
+         defaultwith="serial" nullable="N"/>
address@hidden example
+
+This line will cause gnue-schema to create a structure that
+auto-populates the registration_id field via a sequence if the backend
+will support it.  The sequence will also be created automatically.
+Now lets generate the vendor specific SQL we require.  Since it is a
+relatively new utility in gnue-common, it doesn't have the same level
+of backend support as our datasource system.
+
address@hidden
+$ @kbd{gnue-schema --connection web registration.gsd}
+Loading gsd file 'registration.gsd' ...
+$ @kbd{gnue-schema --connection prod registration.gsd}
+Loading gsd file 'registration.gsd' ...
+$
address@hidden example
+
+Since, as you see from the above transcript, we are using the same
+table structure on both the production database @samp{prod} and the web
+server database @samp{web}, we just need to use the vendor supplied SQL
+shell to run the generated SQL on both systems.  Rather than step you
+through creating tables in your database I will just show the final
+result on the PostgreSQL system I'm currently using:
address@hidden
+web=> \d registration
+                                  Table "public.registration"
+     Column      |         Type          |                      Modifiers
+-----------------+-----------------------+------------------------------------------------------
+ registration_id | bigint                | not null default 
nextval('registration_0_seq'::text)
+ name            | character varying(50) | not null
+ address         | character varying(50) |
+ address2        | character varying(50) |
+ city            | character varying(50) |
+ state           | character varying(30) |
+ zip             | character varying(20) |
+ zip4            | character varying(4)  |
+ phone_number    | character varying(30) |
+Indexes:
+    "pk_registration_id" primary key, btree (registration_id)
address@hidden example
+
+For completeness, here's also a complete MySQL example:
+
address@hidden
+$ gnue-schema --createdb --connection web registration.gsd
+Loading gsd file 'registration.gsd' ...
+You are about to change the database 'web'. Continue [y,N]: y
+Updating schema ...
+$
+$ gnue-schema --createdb --connection prod registration.gsd
+Loading gsd file 'registration.gsd' ...
+You are about to change the database 'prod'. Continue [y,N]: y
+Updating schema ...
+$
address@hidden example
+
+To be able to connect to the MySQL database, you can also adjust the user's 
@file{~/.my.cnf} configuration file. Note that if the @option{--createdb} 
option is used, the same file must be tuned so that running "mysqladmin create 
<dbname>" succeeds for the user, and  that without further prompts. Here's a 
@file{~/.my.cnf} example:
+
address@hidden
+[client]
+user = USERNAME
+password = PASSWORD
+[mysqladmin]
+user = USERNAME
+password = PASSWORD
address@hidden example
+
+And the necessary permissions for the user in MySQL database can be added this 
way:
+
address@hidden
+$ sudo -H mysql -e 'grant all privileges on web.* to
+   USERNAME@@localhost identified by "PASSWORD"'
+$ sudo -H mysql -e 'grant all privileges on prod.* to
+   USERNAME@@localhost identified by "PASSWORD"'
address@hidden example
+
+It is also possible to make gnue-schema only output the database
+specific SQL code, without actually making changes to the database
+itself. To achieve the effect, provide @option{-f} and @option{-o
+OUTPUTFILE} options to gnue-schema.
+
+We are now going to need to put a sample record into the database
address@hidden  While we could use gnue-designer to create a form to do this
+it is beyond the scope of this guide. Instead I'll show the SQL
+statement I used to populate my database.
+
address@hidden
+web=> insert into registration (name, address, address2, city, state, zip, 
zip4, phone_number)
+web-> values ('James Thompson','123 
First',NULL,'Anytown','KS','11111','1111','785-555-1212');
+INSERT 10969865 1
address@hidden example
+
+The rest of this page is blank so that the source code appears on a single page
+
address@hidden Our application
address@hidden Our Application
+Now its time to take a look at the another application we'll be using to 
transfer the data.  We will go ahead and use GClientApp as our base.  The 
reasons will become apparent later in the chapter.  Now a quick look at that 
code.  The parts in bold will be the new features we've not covered in previous 
chapters and examples.
+
address@hidden
+from gnue.common.apps.GClientApp import GClientApp
+from gnue.common.datasources.GDataSource import DataSourceWrapper
+class TransferTable(GClientApp):
+  VERSION = "1.0.0"
+  COMMAND = "tableTransfer"
+  NAME = "tableTransfer"
+  SUMMARY = """
+  Transfers data from one table in a datasource to
+  a different table in the a datasource.  The same
+  datasource can be used in both tables.
+  """
+  def run(self):
+    SOURCE_DATASOURCE = 'web'
+    SOURCE_TABLE      = 'registration'
+    DEST_DATASOURCE   = 'prod'
+    DEST_TABLE        = 'registration'
+    tableFields      = ['registration_id', 'name','address','address2',
+                        'city','state','zip','zip4','phone_number']
+    sourceDatasource = DataSourceWrapper(self.connections,
+                         fields = tableFields,
+                         address@hidden'connection':  SOURCE_DATASOURCE,
+                                     'name': 'dtsSource',
+                                     'table': SOURCE_TABLE, @} )
+    destDatasource   = DataSourceWrapper(self.connections,
+                         fields = tableFields,
+                         address@hidden'connection': DEST_DATASOURCE,
+                                     'name': 'dtsDest',
+                                     'table': DEST_TABLE, @} )
+
+    # Perform the transfer
+    sourceResultSet = sourceDatasource.createResultSet()
+    destResultSet = destDatasource.createEmptyResultSet()
+
+    for sourceRec in sourceResultSet:
+       destRec = destResultSet.insertRecord()
+       for field in tableFields:
+         destRec[field] = sourceRec[field]
+       sourceRec.delete()
+
+    sourceResultSet.post()
+    destResultSet.post()
+
+    self.connections.commitAll()
+
+if __name__ == '__main__':
+  TransferTable().run()
address@hidden example
+
+Lets go through the code.   We'll skip the code that isn't in bold.  If you 
need to review what that code does please refer to chapter 2.
+
address@hidden
+from gnue.common.datasources.GDataSource import DataSourceWrapper
+
address@hidden will allow us to properly access a GDataSource.}
+    
+    SOURCE_DATASOURCE = 'web'
+    SOURCE_TABLE      = 'registration'
+    DEST_DATASOURCE   = 'prod'
+    DEST_TABLE        = 'registration'
+    tableFields      = ['registration_id', 'name','address','address2',
+                        'city','state','zip','zip4','phone_number']
address@hidden example
+
+The uppercase variable names are simply used to make it easy to change values 
later.  tableFields is a python list containing the field names we will be 
using from the tables.
+
address@hidden
+    sourceDatasource = DataSourceWrapper(self.connections,
+                         fields = tableFields,
+                         address@hidden'connection':  SOURCE_DATASOURCE,
+                                     'name': 'dtsSource',
+                                     'table': SOURCE_TABLE, @} )
+    destDatasource   = DataSourceWrapper(self.connections,
+                         fields = tableFields,
+                         address@hidden'connection': DEST_DATASOURCE,
+                                     'name': 'dtsDest',
+                                     'table': DEST_TABLE, @} )
address@hidden example
+
+Here we are defining our two datasources.  We'll only cover the 
sourceDatasource in detail.
+The first argument passed in is self.connections, this is an instance of 
gnue-common's connection manager.  The connection manager does exactly as it's 
name implies.  Since we're using GClientApp this is created for us at startup 
transparently.
+Next we pass in the fields to the datasource  fields = tableFields  This, in 
effect,  registers the fields we are interested in manipulating with the 
DataSource.  It's worth noting that if we were just reading data these names 
would not be needed.  If a fields value is not passed in then the GDataSource 
will default to all fields in the table.
+One piece of this code needs to be looked at in greater detail....
address@hidden
+                         address@hidden'connection': DEST_DATASOURCE,
+                                     'name': 'dtsDest',
+                                     'table': DEST_TABLE, @}
address@hidden example
+It maps values to attributes a GDataSource would normally have populated from 
it's XML definition.  The value assigned to connection is the name of the gnue 
connection we previously defined in /usr/local/gnue/etc/connections.conf.  name 
is the name gnue will internally assign to this datasource.  It should be a 
unique name.  While we do not use the defined name in this application the name 
would prove usefully if we were to use gnue-commons trigger system.  The name 
space provided by that system could contain this defined name as a handle to 
the datasource for your triggers.  table is simply the name of the table to 
which the datasource will bind.
+Next we move on to the code that will generate a pair gnue-common's  
ResultSets. 
address@hidden
+    sourceResultSet = sourceDatasource.createResultSet()
+    destResultSet = destDatasource.createEmptyResultSet()
address@hidden example
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
address@hidden Data source drivers
address@hidden Data source Drivers
+
address@hidden
+Gnue currently fully supports 
+
+* interbase/firebird::          
+* mysql::                       
+* PostgreSQL::                  
+* sap dB/max dB::                 
+* sqlite::                      
+
+GNUe and also supports following except for automatic schema creation
+
+* ms SQL::
+* access::
+* oracle::
+
+There is limited support for file based backends with
+
+* csv files::
+* dbase files::
+* ini files::
address@hidden menu
+
+And of course for GNUe has support for
address@hidden
+* gnue-appserver:: Using gnue-appserver as a backend.
address@hidden menu
+
address@hidden interbase/firebird
address@hidden interbase/firebird
+
address@hidden mysql
address@hidden mysql
+
address@hidden PostgreSQL
address@hidden Using the PostgreSQL database with GNU Enterprise
+
address@hidden Setting up the permissions on the database server
+
+NOTE: This is the quick and dirty way, granting full, password-less access to a
+given host or subnet.  You most probably don't want this in production
+environments.  Please refer to your PostgreSQL documentation for setting up
+access permissions properly.
+
+For the quick and dirty "full access" configuration, edit the file
address@hidden/etc/postgresql/pg_hba.conf} and set @code{host}, @code{db} or 
@code{user} to @samp{trust}.
+
+To grant @dfn{trusted} (full) access from the local host add a line like:
+
address@hidden
+host  all  all  127.0.0.1     255.255.255.255  trust
address@hidden example
+
+To grant trusted access from the LAN 192.168.32.*
+
address@hidden
+host  all  all  192.168.32.0  255.255.255.0    trust
address@hidden example
+
address@hidden sap dB/max dB
address@hidden sap dB/max dB
+
address@hidden sqlite
address@hidden sqlite
+
address@hidden ms SQL
address@hidden ms SQL
+
address@hidden access
address@hidden access
address@hidden oracle
address@hidden oracle
+
address@hidden csv files
address@hidden csv files
+
address@hidden dbase files
address@hidden dbase files
+
address@hidden ini files
address@hidden ini files
+
address@hidden gnue-appserver
address@hidden gnue-appserver
+
+
address@hidden Startup
address@hidden Startup
address@hidden
+Client [GClientApp()] created and run [.run()]
+  |
+  +-- GClientApp parses command line arguments and handles debugging, 
+  |   profiling, help, and versioning.
+  |
+  +-- Login Handler [LoginHandler()] setup by UI
+  |
+  +-- Connections Manager created [GConnections()]
+  |     |
+  |     +-- Reads the Connections Definition File.
+  |     |
+  |     +-- Stores a reference to the Login Handler for future use.
+  |
+  +-- Object File is loaded [GParser.loadXMLObject()]
+  |     |
+  |     +-- Root Object created and returned.
+  |     |
+  |     +-- In root object, Connections Manager is set.
+  |          |
+  |          +-- Data Sources [GDataSource()] ask connections manager for 
+  |              a dbdriver [GDataObject()] based on their type and 
+  |              connection name.
+  |      
+  +-- All objects are initialized from the top down.
+  |     |
+  |     +-- For each Data Source, Client App asks Connection Manager for 
+  |         a data connection for the Data Source's dbdriver.
+  |           |
+  |           +-- If no data connection exists, Connection Manager...
+  |                 |
+  |                 +-- ... asks the Data Source to ask the GDataObject
+  |                 |   what needs to be input from the user to login
+  |                 |   to the database (usually, user/pass)
+  |                 |
+  |                 +-- ... sends a message to the Login Handler asking
+  |                 |   for the required fields.
+  |                 |     |
+  |                 |     +-- Login Handler prompts the user for fields
+  |                 |
+  |                 +-- ... tells the Data Object to attempt a login
+  |                 |
+  |                 +-- ... gets the data connection from the Data Object
+  |                     and saves it for future data sources.
address@hidden example
+
address@hidden Schema
address@hidden Schema Definition Elements
address@hidden schema.texi
+
address@hidden Copying This Manual
address@hidden Copying This Manual
+
address@hidden
+* GNU Free Documentation License::  License for copying this manual.
address@hidden menu
+
address@hidden fdl.texi
+
address@hidden Index
address@hidden Index
+
address@hidden cp
+
address@hidden

Added: trunk/gnue-common/doc/manual/gpl.texi
===================================================================
--- trunk/gnue-common/doc/manual/gpl.texi       2005-05-31 22:09:38 UTC (rev 
7556)
+++ trunk/gnue-common/doc/manual/gpl.texi       2005-06-01 11:26:50 UTC (rev 
7557)
@@ -0,0 +1,392 @@
address@hidden Copying
address@hidden GNU GENERAL PUBLIC LICENSE
address@hidden Version 2, June 1991
+
address@hidden This file is intended to be included in another file.
+
address@hidden
+Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
address@hidden display
+
address@hidden Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software---to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
address@hidden
address@hidden TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
address@hidden iftex
address@hidden
address@hidden TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
address@hidden ifinfo
+
address@hidden 0
address@hidden
+This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The ``Program'', below,
+refers to any such program or work, and a ``work based on the Program''
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term ``modification''.)  Each licensee is addressed as ``you''.
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
address@hidden
+You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
address@hidden
+You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
address@hidden a
address@hidden
+You must cause the modified files to carry prominent notices
+stating that you changed the files and the date of any change.
+
address@hidden
+You must cause any work that you distribute or publish, that in
+whole or in part contains or is derived from the Program or any
+part thereof, to be licensed as a whole at no charge to all third
+parties under the terms of this License.
+
address@hidden
+If the modified program normally reads commands interactively
+when run, you must cause it, when started running for such
+interactive use in the most ordinary way, to print or display an
+announcement including an appropriate copyright notice and a
+notice that there is no warranty (or else, saying that you provide
+a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this
+License.  (Exception: if the Program itself is interactive but
+does not normally print such an announcement, your work based on
+the Program is not required to print an announcement.)
address@hidden enumerate
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
address@hidden
+You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
address@hidden a
address@hidden
+Accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of Sections
+1 and 2 above on a medium customarily used for software interchange; or,
+
address@hidden
+Accompany it with a written offer, valid for at least three
+years, to give any third party, for a charge no more than your
+cost of physically performing source distribution, a complete
+machine-readable copy of the corresponding source code, to be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
address@hidden
+Accompany it with the information you received as to the offer
+to distribute corresponding source code.  (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form with such
+an offer, in accord with Subsection b above.)
address@hidden enumerate
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
address@hidden
+You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
address@hidden
+You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
address@hidden
+Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
address@hidden
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
address@hidden
+If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
address@hidden
+The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and ``any
+later version'', you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
address@hidden
+If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
address@hidden
address@hidden NO WARRANTY
address@hidden iftex
address@hidden
address@hidden NO WARRANTY
address@hidden ifinfo
+
address@hidden
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
address@hidden
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
address@hidden enumerate
+
address@hidden
address@hidden END OF TERMS AND CONDITIONS
address@hidden iftex
address@hidden
address@hidden END OF TERMS AND CONDITIONS
address@hidden ifinfo
+
address@hidden
address@hidden Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the ``copyright'' line and a pointer to where the full notice is found.
+
address@hidden
address@hidden line to give the program's name and a brief idea of what it 
does.}
+Copyright (C) @var{yyyy}  @var{name of author}
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
address@hidden smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
address@hidden
+Gnomovision version 69, Copyright (C) address@hidden @var{name of author}
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show c' for details.
address@hidden smallexample
+
+The hypothetical commands @samp{show w} and @samp{show c} should show
+the appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than @samp{show w} and
address@hidden c}; they could even be mouse-clicks or menu items---whatever
+suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the program, if
+necessary.  Here is a sample; alter the names:
+
address@hidden
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+`Gnomovision' (which makes passes at compilers) written by James Hacker.
+
address@hidden of Ty Coon}, 1 April 1989
+Ty Coon, President of Vice
address@hidden example
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.

Added: trunk/gnue-common/doc/manual/schema.texi
===================================================================
--- trunk/gnue-common/doc/manual/schema.texi    2005-05-31 22:09:38 UTC (rev 
7556)
+++ trunk/gnue-common/doc/manual/schema.texi    2005-06-01 11:26:50 UTC (rev 
7557)
@@ -0,0 +1,672 @@
+
address@hidden Schema Tags
address@hidden @code{schema}
address@hidden schema, definition element
+
+Top-level element that encloses all the tables and data.
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+The author of the schema.
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+Descriptive text of the schema.
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+The title of the schema.
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+The Version of the schema.
address@hidden multitable
+
address@hidden Child Nodes
address@hidden, 
+ @code{description}, 
+ @code{tables}
address@hidden Data Tags
address@hidden @code{data}
address@hidden data, definition element
+
+No description provided
+
address@hidden Child Nodes
address@hidden, 
+ @code{tabledata}
address@hidden @code{column}
address@hidden column, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{field}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden@strong{type}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden, N}
address@hidden
address@hidden@code{N}}
address@hidden
+No description provided
address@hidden multitable
+
+
address@hidden @code{definition}
address@hidden definition, definition element
+
+No description provided
+
address@hidden Child Nodes
address@hidden
address@hidden @code{import-tabledata}
address@hidden import-tabledata, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{library}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden@strong{tablename}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
+
address@hidden @code{row}
address@hidden row, definition element
+
+No description provided
+
address@hidden Child Nodes
address@hidden
address@hidden @code{rows}
address@hidden rows, definition element
+
+No description provided
+
address@hidden Child Nodes
address@hidden
address@hidden @code{tabledata}
address@hidden tabledata, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden@strong{tablename}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
address@hidden Child Nodes
address@hidden, 
+ @code{rows}
address@hidden @code{value}
address@hidden value, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden, N}
address@hidden
address@hidden@code{N}}
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+No description provided
address@hidden multitable
+
+
address@hidden Description Tags
address@hidden @code{description}
address@hidden description, definition element
+
+No description provided
+
+
address@hidden Tables Tags
address@hidden @code{tables}
address@hidden tables, definition element
+
+No description provided
+
address@hidden Child Nodes
address@hidden, 
+ @code{table}
address@hidden @code{constraint}
address@hidden constraint, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
address@hidden Child Nodes
address@hidden, 
+ @code{constraintref}
address@hidden @code{constraintfield}
address@hidden constraintfield, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
+
address@hidden @code{constraintref}
address@hidden constraintref, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden@strong{table}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
+
address@hidden @code{constraints}
address@hidden constraints, definition element
+
+No description provided
+
address@hidden Child Nodes
address@hidden
address@hidden @code{field}
address@hidden field, definition element
+
+A field represents a column in the database table
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+The ID of the field. Must be unique to the table, regardless case.
address@hidden
address@hidden@strong{type}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+The data type of the field. Supported data types are: string, number, boolean, 
date, time, datetimetext can be used for a synonyme to string and timestamp for 
datetime.
address@hidden
address@hidden
address@hidden
address@hidden, N}
address@hidden
address@hidden@code{N}}
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+Assigns a default value to the field. When entries is created with empty 
fields, the fields will be set to their respective default values. Data 
manipulation commands can also set fields to their default value explicitly.
address@hidden
address@hidden
address@hidden
address@hidden'constant', 'serial', 'timestamp']}
address@hidden
address@hidden
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+Any text descriptive to the field.
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+A positive integer. The field can store strings with this amount of characters 
in length
address@hidden
address@hidden
address@hidden
address@hidden, N}
address@hidden
address@hidden@code{Y}}
address@hidden
+If set, NULL is accepted for this field.
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+Number of decimal places in the field.
address@hidden multitable
+
+
address@hidden @code{fields}
address@hidden fields, definition element
+
+No description provided
+
address@hidden Child Nodes
address@hidden, 
+ @code{import-field}
address@hidden @code{import-field}
address@hidden import-field, definition element
+
+A field represents a column in the database table
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{library}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+The ID of the field. Must be unique to the table, regardless case.
address@hidden
address@hidden@strong{type}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+The data type of the field. Supported data types are: string, number, boolean, 
date, time, datetimetext can be used for a synonyme to string and timestamp for 
datetime.
address@hidden
address@hidden
address@hidden
address@hidden, N}
address@hidden
address@hidden@code{N}}
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+Assigns a default value to the field. When entries is created with empty 
fields, the fields will be set to their respective default values. Data 
manipulation commands can also set fields to their default value explicitly.
address@hidden
address@hidden
address@hidden
address@hidden'constant', 'serial', 'timestamp']}
address@hidden
address@hidden
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+Any text descriptive to the field.
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+A positive integer. The field can store strings with this amount of characters 
in length
address@hidden
address@hidden
address@hidden
address@hidden, N}
address@hidden
address@hidden@code{Y}}
address@hidden
+If set, NULL is accepted for this field.
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+Number of decimal places in the field.
address@hidden multitable
+
+
address@hidden @code{import-fields}
address@hidden import-fields, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{library}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
+
address@hidden @code{import-table}
address@hidden import-table, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{library}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden'create', 'extend']}
address@hidden
address@hidden
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
+
address@hidden @code{index}
address@hidden index, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden, N}
address@hidden
address@hidden@code{N}}
address@hidden
+No description provided
address@hidden multitable
+
address@hidden Child Nodes
address@hidden
address@hidden @code{indexes}
address@hidden indexes, definition element
+
+No description provided
+
address@hidden Child Nodes
address@hidden
address@hidden @code{indexfield}
address@hidden indexfield, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
+
address@hidden @code{pkfield}
address@hidden pkfield, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
+
address@hidden @code{primarykey}
address@hidden primarykey, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
address@hidden Child Nodes
address@hidden
address@hidden @code{table}
address@hidden table, definition element
+
+No description provided
address@hidden Attributes
address@hidden @columnfractions .25 .14 .14 .47
address@hidden Attribute @tab Values @tab Default @tab Description
address@hidden
address@hidden@strong{name}}
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden'create', 'extend']}
address@hidden
address@hidden
address@hidden
+No description provided
address@hidden
address@hidden
address@hidden
address@hidden
address@hidden
+
address@hidden
+No description provided
address@hidden multitable
+
address@hidden Child Nodes
address@hidden, 
+ @code{fields}, 
+ @code{import-fields}, 
+ @code{indexes}, 
+ @code{primarykey}
address@hidden Import Tags
+





reply via email to

[Prev in Thread] Current Thread [Next in Thread]