[libgda/gtk3] Have "make distcheck" work
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda/gtk3] Have "make distcheck" work
- Date: Mon, 21 Feb 2011 20:09:30 +0000 (UTC)
commit b4f82bd1e9245b4ac0301eab728587e92e8b78c1
Author: Vivien Malerba <malerba gnome-db org>
Date: Mon Feb 21 21:09:08 2011 +0100
Have "make distcheck" work
doc/C/Makefile.am | 8 +-
doc/C/data_select.xml | 3 +
doc/C/data_validation.xml | 5 +
doc/C/examples/blobtest.c | 5 +
doc/C/examples/full_example.c | 5 +
doc/C/fdl-appendix.sgml | 7 +-
doc/C/gda-sql-manual.xml | 10 +-
doc/C/gettingstarted.xml | 15 +-
doc/C/howto.xml | 5 +
doc/C/installation.xml | 7 +
doc/C/libgda-5.0-docs.sgml | 458 ++++-------
doc/C/limitations.xml | 5 +
doc/C/migration.xml | 3 +
doc/C/migration2.xml | 7 +-
doc/C/packaging.xml | 5 +
doc/C/packaging_ui.xml | 5 +
doc/C/prov-notes.xml | 3 +
doc/C/prov-writing-assembly.xml | 110 +++
doc/C/prov-writing-blobs.xml | 87 ++
doc/C/prov-writing-parser.xml | 147 ++++
doc/C/prov-writing-recordsets.xml | 96 +++
doc/C/prov-writing-virtual-methods.xml | 596 +++++++++++++
doc/C/prov-writing.xml | 1016 -----------------------
doc/C/server-operation.xml | 5 +
doc/C/virtual.xml | 9 +-
libgda-report/engine/rt-parser.c | 6 +-
libgda-ui/gdaui-rt-editor.c | 8 +-
libgda-ui/internal/gdaui-provider-spec-editor.c | 4 +-
libgda-ui/internal/utility.c | 4 +-
po/POTFILES.skip | 2 +-
tools/browser/doc/gda-browser-docs.sgml | 56 +-
31 files changed, 1324 insertions(+), 1378 deletions(-)
---
diff --git a/doc/C/Makefile.am b/doc/C/Makefile.am
index d6f2820..b560eef 100644
--- a/doc/C/Makefile.am
+++ b/doc/C/Makefile.am
@@ -17,6 +17,9 @@ SCANGOBJ_OPTIONS=
# The directory containing the source code. Relative to $(srcdir)
DOC_SOURCE_DIR=../..
+# Add the builddir to the HTML path so that version.xml is found
+MKHTML_OPTIONS=--path="$(abs_srcdir)"
+
# Used for dependencies.
HFILE_GLOB=
CFILE_GLOB=
@@ -24,7 +27,7 @@ CFILE_GLOB=
# Header files to ignore when scanning
IGNORE_HFILES= gda-marshal.h gda-custom-marshal.h gda-enum-types.h sqlite3.h csv.h md5.h \
jni-wrapper.h gda-jdbc-recordset.h gda-jdbc-blob-op.h gda-jdbc-provider.h gda-jdbc-pstmt.h \
- popup-container.h providers tools control-center tests samples plugins
+ popup-container.h providers tools control-center tests samples plugins tmp
# CFLAGS and LDFLAGS for compiling scan program. Only needed
# if $(DOC_MODULE).types is non-empty.
@@ -77,7 +80,8 @@ include $(top_srcdir)/gtk-doc.make
# Other files to distribute
EXTRA_DIST += examples/full_example.c installation.xml limitations.xml migration.xml migration2.xml \
server-operation.xml gettingstarted.xml virtual.xml virtual-notice.xml store-meta-type.xml \
- prov-writing.xml packaging.xml packaging_ui.xml i_s_doc.xml howto.xml gda-sql-manual.xml data_validation.xml data_select.xml \
+ prov-writing-virtual-methods.xml prov-writing-recordsets.xml prov-writing-blobs.xml prov-writing-parser.xml prov-writing-assembly.xml \
+ packaging.xml packaging_ui.xml i_s_doc.xml howto.xml gda-sql-manual.xml data_validation.xml data_select.xml \
DataModels.svg \
architecture.svg parts.svg stmt-unknown.svg stmt-select.svg stmt-insert1.svg stmt-insert2.svg \
stmt-update.svg stmt-compound.svg information_schema.svg howto-exec.svg thread-wrapper.svg \
diff --git a/doc/C/data_select.xml b/doc/C/data_select.xml
index 2c1a7d7..20ed086 100644
--- a/doc/C/data_select.xml
+++ b/doc/C/data_select.xml
@@ -1,3 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<sect1 id="data-select">
<title>Advanced GdaDataSelect usage</title>
<para>
diff --git a/doc/C/data_validation.xml b/doc/C/data_validation.xml
index 7203c9e..194fa7b 100644
--- a/doc/C/data_validation.xml
+++ b/doc/C/data_validation.xml
@@ -1,3 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
<sect1 id="data-validation">
<title>Custom data validation</title>
<para>
diff --git a/doc/C/examples/blobtest.c b/doc/C/examples/blobtest.c
index b92a74a..df7fcb4 100644
--- a/doc/C/examples/blobtest.c
+++ b/doc/C/examples/blobtest.c
@@ -1,3 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<programlisting>
<![CDATA[#include <libgda/libgda.h>
#include <libgda/sql-parser/gda-sql-parser.h>
#include <libgda/gda-blob-op.h>
@@ -190,3 +194,4 @@ do_fetch (GdaConnection *cnc, gint id, GError **error)
return result;
}
]]>
+</programlisting>
diff --git a/doc/C/examples/full_example.c b/doc/C/examples/full_example.c
index 2fd2ad9..6fad3d8 100644
--- a/doc/C/examples/full_example.c
+++ b/doc/C/examples/full_example.c
@@ -1,3 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<programlisting>
<![CDATA[#include <libgda/libgda.h>
#include <sql-parser/gda-sql-parser.h>
@@ -229,3 +233,4 @@ run_sql_non_select (GdaConnection *cnc, const gchar *sql)
g_object_unref (stmt);
}
]]>
+</programlisting>
diff --git a/doc/C/fdl-appendix.sgml b/doc/C/fdl-appendix.sgml
index 6ab4128..6301540 100644
--- a/doc/C/fdl-appendix.sgml
+++ b/doc/C/fdl-appendix.sgml
@@ -1,3 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY copy "The GNOME Foundation">
+]>
<!--
The GNU Free Documentation License 1.1 in DocBook
Markup by Eric Baudais <baudais okstate edu>
@@ -627,7 +632,7 @@
<blockquote>
<para>
- Copyright © YEAR YOUR NAME.
+ Copyright © 1999 - 2011.
</para>
<para>
Permission is granted to copy, distribute and/or modify this
diff --git a/doc/C/gda-sql-manual.xml b/doc/C/gda-sql-manual.xml
index df81fe8..0bb7258 100644
--- a/doc/C/gda-sql-manual.xml
+++ b/doc/C/gda-sql-manual.xml
@@ -1,3 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
+<part id="gda-sql">
+ <title>Gda SQL console's user manual</title>
<para>
The &LIBGDA;'s console tool allow one to send SQL commands to a database server, and
to easily browse the meta data associated to the database (ie. get information about
@@ -773,5 +780,4 @@ SalesTest>
</sect1>
</chapter>
-
-
+</part>
diff --git a/doc/C/gettingstarted.xml b/doc/C/gettingstarted.xml
index 8ad2b87..b4af31e 100644
--- a/doc/C/gettingstarted.xml
+++ b/doc/C/gettingstarted.xml
@@ -1,4 +1,9 @@
-<chapter id="getting_started">
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
+<chapter id="getting_started" xmlns:xi="http://www.w3.org/2003/XInclude">
<title>Code examples</title>
<sect1 id="initializing">
<title>Initializing</title>
@@ -342,9 +347,7 @@ cc -o example example.c `pkg-config --cflags --libs libgda-3.0`
</para>
<para>
The code is:
- <programlisting>
-&fullexample;
- </programlisting>
+<xi:include href="examples/full_example.c"/>
and executing should output something like:
<programlisting>> ./example
ref | name | price
@@ -461,9 +464,7 @@ create_table (GdaConnection *cnc)
</para>
<para>
The code is:
- <programlisting>
-&blobsexample;
- </programlisting>
+<xi:include href="examples/blobtest.c"/>
</para>
</sect1>
diff --git a/doc/C/howto.xml b/doc/C/howto.xml
index 31b35aa..f182d64 100644
--- a/doc/C/howto.xml
+++ b/doc/C/howto.xml
@@ -1,3 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
<chapter id="howto">
<title>HOWTO for common tasks</title>
<para>
diff --git a/doc/C/installation.xml b/doc/C/installation.xml
index 1940f3a..e84075d 100644
--- a/doc/C/installation.xml
+++ b/doc/C/installation.xml
@@ -1,3 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+<!ENTITY GNOMEDB "<acronym>Gnome-Db</acronym>">
+<!ENTITY RPM "<acronym>RPM</acronym>">
+]>
<chapter id="installation">
<title>Installation</title>
<sect1 id="installation-introduction">
diff --git a/doc/C/libgda-5.0-docs.sgml b/doc/C/libgda-5.0-docs.sgml
index 67d2e62..946748f 100644
--- a/doc/C/libgda-5.0-docs.sgml
+++ b/doc/C/libgda-5.0-docs.sgml
@@ -1,164 +1,25 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-<!ENTITY nbsp " ">
+<!ENTITY copy "The GNOME Foundation">
<!ENTITY version SYSTEM "version.xml">
<!ENTITY builddate SYSTEM "builddate.xml">
<!ENTITY LIBGDA "<application>Libgda</application>">
-<!ENTITY GNOMEDB "<application>GNOME-DB</application>">
<!ENTITY igalia '<emphasis><ulink url="http://www.igalia.com">Igalia, S.L.</ulink></emphasis>'>
<!ENTITY xobas '<emphasis><ulink url="http://www.xobas.com">Xobas Software</ulink></emphasis>'>
<!ENTITY API "<acronym>API</acronym>">
-<!ENTITY DBMS "<acronym>DBMS</acronym>">
-<!ENTITY DSN "<acronym>DSN</acronym>">
<!ENTITY ODBC "<acronym>ODBC</acronym>">
<!ENTITY GDA "<acronym>GDA</acronym>">
<!ENTITY LDAP "<acronym>LDAP</acronym>">
-<!ENTITY CORBA "<acronym>CORBA</acronym>">
-<!ENTITY IDL "<acronym>IDL</acronym>">
-<!ENTITY ORB "<acronym>ORB</acronym>">
<!ENTITY SQL "<acronym>SQL</acronym>">
-<!ENTITY RPM "<acronym>RPM</acronym>">
-<!ENTITY XML "<acronym>XML</acronym>">
-<!ENTITY PGSQL "<application>PostgreSQL</application>">
-<!ENTITY MYSQL "<application>MySQL</application>">
-<!ENTITY ORAC "<application>Oracle</application>">
-<!ENTITY INTERB "<application>Interbase</application>">
-<!ENTITY SYBASE "<application>Sybase</application>">
-<!ENTITY MSACC "<application>MS Access</application>">
-<!ENTITY INFOR "<application>Informix</application>">
-<!ENTITY GDASERVERPROVIDER "<link linkend='GdaServerProvider'>GdaServerProvider</link>">
-<!ENTITY GDADATAMODEL "<link linkend='GdaDataModel'>GdaDataModel</link>">
-<!ENTITY GDADATAMODELARRAY "<link linkend='GdaDataModelArray'>GdaDataModelArray</link>">
-<!ENTITY GDADATAMODELHASH "<link linkend='GdaDataModelHash'>GdaDataModelHash</link>">
<!ENTITY gda-list-server-op "<command>gda-list-server-op-5.0</command>">
<!ENTITY gda-list-config "<command>gda-list-config-5.0</command>">
-<!ENTITY gda-sql "<command>gda-sql</command>">
+<!ENTITY gda-sql "<command>gda-sql</command>">
<!ENTITY gda-test-connection "<command>gda-test-connection-5.0</command>">
-<!ENTITY fullexample SYSTEM "examples/full_example.c">
-<!ENTITY blobsexample SYSTEM "examples/blobtest.c">
-<!ENTITY install SYSTEM "installation.xml">
-<!ENTITY examples SYSTEM "gettingstarted.xml">
-<!ENTITY migration SYSTEM "migration.xml">
-<!ENTITY migration2 SYSTEM "migration2.xml">
-<!ENTITY data-validation SYSTEM "data_validation.xml">
-<!ENTITY data-select SYSTEM "data_select.xml">
-<!ENTITY limitations SYSTEM "limitations.xml">
-<!ENTITY provnotes SYSTEM "prov-notes.xml">
-<!ENTITY libgda-GdaCommand SYSTEM "xml/gda-command.xml">
-<!ENTITY libgda-config SYSTEM "xml/gda-config.xml">
-<!ENTITY libgda-GdaConnection SYSTEM "xml/gda-connection.xml">
-<!ENTITY libgda-GdaMutex SYSTEM "xml/gda-mutex.xml">
-<!ENTITY libgda-GdaLockable SYSTEM "xml/gda-lockable.xml">
-<!ENTITY libgda-GdaRow SYSTEM "xml/gda-row.xml">
-<!ENTITY libgda-GdaDataModelArray SYSTEM "xml/gda-data-model-array.xml">
-<!ENTITY libgda-GdaDataModelBdb SYSTEM "xml/gda-data-model-bdb.xml">
-<!ENTITY libgda-GdaDataModelDir SYSTEM "xml/gda-data-model-dir.xml">
-<!ENTITY libgda-GdaDataModel SYSTEM "xml/gda-data-model.xml">
-<!ENTITY libgda-GdaDataModelIter SYSTEM "xml/gda-data-model-iter.xml">
-<!ENTITY libgda-GdaDataModelImport SYSTEM "xml/gda-data-model-import.xml">
-<!ENTITY libgda-GdaDataAccessWrapper SYSTEM "xml/gda-data-access-wrapper.xml">
-<!ENTITY libgda-GdaDataProxy SYSTEM "xml/gda-data-proxy.xml">
-<!ENTITY libgda-GdaConnection-event SYSTEM "xml/gda-connection-event.xml">
-<!ENTITY libgda-GdaColumn SYSTEM "xml/gda-column.xml">
-<!ENTITY libgda-init SYSTEM "xml/libgda.xml">
-<!ENTITY libgdaui-init SYSTEM "xml/libgdaui.xml">
-<!ENTITY libgda-log SYSTEM "xml/gda-log.xml">
-<!ENTITY libgda-quark-list SYSTEM "xml/gda-quark-list.xml">
-<!ENTITY libgda-GdaServerProvider SYSTEM "xml/gda-server-provider.xml">
-<!ENTITY libgda-GdaVirtualProvider SYSTEM "xml/gda-virtual-provider.xml">
-<!ENTITY libgda-GdaVproviderDataModel SYSTEM "xml/gda-vprovider-data-model.xml">
-<!ENTITY libgda-GdaVproviderHub SYSTEM "xml/gda-vprovider-hub.xml">
-<!ENTITY libgda-GdaVirtualConnection SYSTEM "xml/gda-virtual-connection.xml">
-<!ENTITY libgda-GdaVconnectionDataModel SYSTEM "xml/gda-vconnection-data-model.xml">
-<!ENTITY libgda-GdaVconnectionHub SYSTEM "xml/gda-vconnection-hub.xml">
-<!ENTITY libgda-GdaServerOperation SYSTEM "xml/gda-server-operation.xml">
-<!ENTITY libgda-GdaServerOperationNodes SYSTEM "xml/gda-server-operation-nodes.xml">
-<!ENTITY libgda-GdaServerOperationSequences SYSTEM "xml/gda-server-operation-sequences.xml">
-<!ENTITY libgda-serverop-intro SYSTEM "server-operation.xml">
-<!ENTITY libgda-virtual SYSTEM "virtual.xml">
-<!ENTITY libgda-virtual-notice SYSTEM "virtual-notice.xml">
-<!ENTITY libgda-xa-transaction SYSTEM "xml/gda-xa-transaction.xml">
-<!ENTITY libgda-transaction-status SYSTEM "xml/gda-transaction-status.xml">
-<!ENTITY libgda-util SYSTEM "xml/gda-util.xml">
-<!ENTITY libgda-GValue SYSTEM "xml/gda-value.xml">
-<!ENTITY libgda-GdaConnection SYSTEM "xml/gda-connection.xml">
-<!ENTITY GdaStoreMetaType SYSTEM "store-meta-type.xml">
-<!ENTITY libgda-GdaDataHandler SYSTEM "xml/gda-data-handler.xml">
-<!ENTITY libgda-GdaHandlerString SYSTEM "xml/gda-handler-string.xml">
-<!ENTITY libgda-GdaHandlerBoolean SYSTEM "xml/gda-handler-boolean.xml">
-<!ENTITY libgda-GdaHandlerTime SYSTEM "xml/gda-handler-time.xml">
-<!ENTITY libgda-GdaHandlerNumerical SYSTEM "xml/gda-handler-numerical.xml">
-<!ENTITY libgda-GdaHandlerBin SYSTEM "xml/gda-handler-bin.xml">
-<!ENTITY libgda-GdaHandlerType SYSTEM "xml/gda-handler-type.xml">
-<!ENTITY libgda-GdaBlobOp SYSTEM "xml/gda-blob-op.xml">
-<!ENTITY libgda-GdaReportEngine SYSTEM "xml/gda-report-engine.xml">
-<!ENTITY libgda-GdaReportDocument SYSTEM "xml/gda-report-document.xml">
-<!ENTITY libgda-GdaReportDocbookDocument SYSTEM "xml/gda-report-docbook-document.xml">
-<!ENTITY libgda-GdaReportRmlDocument SYSTEM "xml/gda-report-rml-document.xml">
-<!ENTITY libgda-GdaHolder SYSTEM "xml/gda-holder.xml">
-<!ENTITY libgda-GdaSet SYSTEM "xml/gda-set.xml">
-<!ENTITY libgda-GdaStatement SYSTEM "xml/gda-statement.xml">
-<!ENTITY libgda-GdaRepetitiveStatement SYSTEM "xml/gda-repetitive-statement.xml">
-<!ENTITY libgda-GdaSqlStatement SYSTEM "xml/gda-sql-statement.xml">
-<!ENTITY libgda-GdaBatch SYSTEM "xml/gda-batch.xml">
-<!ENTITY libgda-GdaSqlParser SYSTEM "xml/gda-sql-parser.xml">
-<!ENTITY libgda-GdaMetaStore SYSTEM "xml/gda-meta-store.xml">
-<!ENTITY libgda-GdaMetaStruct SYSTEM "xml/gda-meta-struct.xml">
-<!ENTITY libgda-GdaDataSelect SYSTEM "xml/gda-data-select.xml">
-<!ENTITY libgda-GdaDataSelectPriv SYSTEM "xml/gda-data-select-priv.xml">
-<!ENTITY libgda-PStmt SYSTEM "xml/gda-pstmt.xml">
-<!ENTITY libgda-Enums SYSTEM "xml/gda-enums.xml">
-<!ENTITY libgda-convenient SYSTEM "xml/gda-convenient.xml">
-<!ENTITY libgda-GdaDataComparator SYSTEM "xml/gda-data-comparator.xml">
-<!ENTITY provider-writing SYSTEM "prov-writing.xml">
-<!ENTITY packaging SYSTEM "packaging.xml">
-<!ENTITY packaging-ui SYSTEM "packaging_ui.xml">
-<!ENTITY provider-support SYSTEM "xml/provider-support.xml">
-<!ENTITY provider-support-sql SYSTEM "xml/provider-support-sql.xml">
-<!ENTITY i-s-doc SYSTEM "i_s_doc.xml">
-<!ENTITY fdl-appendix SYSTEM "fdl-appendix.sgml">
-<!ENTITY howto SYSTEM "howto.xml">
-<!ENTITY libgda-TreeIndex SYSTEM "xml/tree_index.sgml">
-<!ENTITY GdaSqlManual SYSTEM "gda-sql-manual.xml">
-<!ENTITY GdaAttributesManager SYSTEM "xml/gda-attributes-manager.xml">
-<!ENTITY libgda-GdaTree SYSTEM "xml/gda-tree.xml">
-<!ENTITY libgda-GdaTreeManager SYSTEM "xml/gda-tree-manager.xml">
-<!ENTITY libgda-GdaTreeNode SYSTEM "xml/gda-tree-node.xml">
-<!ENTITY libgda-GdaTreeMgrLabel SYSTEM "xml/gda-tree-mgr-label.xml">
-<!ENTITY libgda-GdaTreeMgrSelect SYSTEM "xml/gda-tree-mgr-select.xml">
-<!ENTITY libgda-GdaTreeMgrSchemas SYSTEM "xml/gda-tree-mgr-schemas.xml">
-<!ENTITY libgda-GdaTreeMgrTables SYSTEM "xml/gda-tree-mgr-tables.xml">
-<!ENTITY libgda-GdaTreeMgrColumns SYSTEM "xml/gda-tree-mgr-columns.xml">
-<!ENTITY libgda-GdaSqlBuilder SYSTEM "xml/gda-sql-builder.xml">
-<!ENTITY libgda-GdaThreadWrapper SYSTEM "xml/gda-thread-wrapper.xml">
-
-<!ENTITY visual-index SYSTEM "visual_index.xml">
-<!ENTITY libgdaui-GdauiBasicForm SYSTEM "xml/gdaui-basic-form.xml">
-<!ENTITY libgdaui-GdauiCombo SYSTEM "xml/gdaui-combo.xml">
-<!ENTITY libgdaui-GdauiDataEntry SYSTEM "xml/gdaui-data-entry.xml">
-<!ENTITY libgdaui-gdaui-easy SYSTEM "xml/gdaui-easy.xml">
-<!ENTITY libgdaui-gdaui-plugins SYSTEM "xml/gdaui-plugins.xml">
-<!ENTITY libgdaui-GdauiDataStore SYSTEM "xml/gdaui-data-store.xml">
-<!ENTITY libgdaui-GdauiDataFilter SYSTEM "xml/gdaui-data-filter.xml">
-<!ENTITY libgdaui-GdauiDataProxy SYSTEM "xml/gdaui-data-proxy.xml">
-<!ENTITY libgdaui-GdauiDataProxyInfo SYSTEM "xml/gdaui-data-proxy-info.xml">
-<!ENTITY libgdaui-GdauiForm SYSTEM "xml/gdaui-form.xml">
-<!ENTITY libgdaui-GdauiGrid SYSTEM "xml/gdaui-grid.xml">
-<!ENTITY libgdaui-GdauiLogin SYSTEM "xml/gdaui-login.xml">
-<!ENTITY libgdaui-GdauiProviderSelector SYSTEM "xml/gdaui-provider-selector.xml">
-<!ENTITY libgdaui-GdauiRawForm SYSTEM "xml/gdaui-raw-form.xml">
-<!ENTITY libgdaui-GdauiRawGrid SYSTEM "xml/gdaui-raw-grid.xml">
-<!ENTITY libgdaui-GdauiServerOperation SYSTEM "xml/gdaui-server-operation.xml">
-<!ENTITY libgdaui-GdauiTreeStore SYSTEM "xml/gdaui-tree-store.xml">
-<!ENTITY libgdaui-GdauiCloud SYSTEM "xml/gdaui-cloud.xml">
-<!ENTITY libgdaui-GdauiDataSelector SYSTEM "xml/gdaui-data-selector.xml">
-<!ENTITY libgdaui-GdauiRtEditor SYSTEM "xml/gdaui-rt-editor.xml">
]>
-
-<book id="index">
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
<bookinfo>
- <title>GNOME Data Access 4 manual</title>
+ <title>GNOME Data Access 5 manual</title>
<releaseinfo>for version &version;</releaseinfo>
<authorgroup>
<author>
@@ -237,7 +98,7 @@
<date>&builddate;</date>
<copyright>
<year>1999 - 2011</year>
- <holder>The GNOME Foundation</holder>
+ <holder>©</holder>
</copyright>
<abstract>
<para>
@@ -443,12 +304,12 @@
</mediaobject>
</chapter>
- &install;
- &examples;
- &migration;
- &migration2;
- &provnotes;
- &limitations;
+ <xi:include href="installation.xml"/>
+ <xi:include href="gettingstarted.xml"/>
+ <xi:include href="migration.xml"/>
+ <xi:include href="migration2.xml"/>
+ <xi:include href="prov-notes.xml"/>
+ <xi:include href="limitations.xml"/>
</part>
<part id="part_libgda_api">
<title>API reference</title>
@@ -543,17 +404,17 @@
</chapter>
- &howto;
+ <xi:include href="howto.xml"/>
<chapter>
<title>Object Hierarchy</title>
- &libgda-TreeIndex;
+ <xi:include href="xml/tree_index.sgml"/>
</chapter>
<chapter id="init_config">
<title>Initialization and configuration</title>
<para>Configuration examples are given in <link linkend="installation-configuring">this introduction section</link></para>
- &libgda-init;
- &libgda-config;
+ <xi:include href="xml/libgda.xml"/>
+ <xi:include href="xml/gda-config.xml"/>
<sect1 id="libgda_env_variables">
<title>Configuring &LIBGDA; with environment variables</title>
<para>Some functional aspects of &LIBGDA; can be configured using environment variables which are
@@ -670,30 +531,30 @@
</textobject>
</mediaobject>
</para>
- &libgda-convenient;
- &libgda-GdaConnection;
- &libgda-GdaSqlParser;
- &libgda-GdaSqlBuilder;
- &libgda-GdaStatement;
- &libgda-GdaRepetitiveStatement;
- &libgda-GdaBatch;
- &libgda-GdaHolder;
- &libgda-GdaSet;
- &libgda-GdaConnection-event;
- &libgda-transaction-status;
- &libgda-xa-transaction;
- &GdaStoreMetaType;
+ <xi:include href="xml/gda-convenient.xml"/>
+ <xi:include href="xml/gda-connection.xml"/>
+ <xi:include href="xml/gda-sql-parser.xml"/>
+ <xi:include href="xml/gda-sql-builder.xml"/>
+ <xi:include href="xml/gda-statement.xml"/>
+ <xi:include href="xml/gda-repetitive-statement.xml"/>
+ <xi:include href="xml/gda-batch.xml"/>
+ <xi:include href="xml/gda-holder.xml"/>
+ <xi:include href="xml/gda-set.xml"/>
+ <xi:include href="xml/gda-connection-event.xml"/>
+ <xi:include href="xml/gda-transaction-status.xml"/>
+ <xi:include href="xml/gda-xa-transaction.xml"/>
+ <xi:include href="store-meta-type.xml"/>
</chapter>
<chapter id="virtual_connection">
<title>Virtual connections</title>
- &libgda-virtual;
- &libgda-GdaVirtualProvider;
- &libgda-GdaVproviderDataModel;
- &libgda-GdaVproviderHub;
- &libgda-GdaVirtualConnection;
- &libgda-GdaVconnectionDataModel;
- &libgda-GdaVconnectionHub;
+ <xi:include href="virtual.xml"/>
+ <xi:include href="xml/gda-virtual-provider.xml"/>
+ <xi:include href="xml/gda-vprovider-data-model.xml"/>
+ <xi:include href="xml/gda-vprovider-hub.xml"/>
+ <xi:include href="xml/gda-virtual-connection.xml"/>
+ <xi:include href="xml/gda-vconnection-data-model.xml"/>
+ <xi:include href="xml/gda-vconnection-hub.xml"/>
</chapter>
<chapter id="data_models">
@@ -738,22 +599,22 @@
</listitem>
</itemizedlist>
</para>
- &libgda-GValue;
- &data-validation;
- &data-select;
- &libgda-GdaBlobOp;
- &libgda-GdaDataModel;
- &libgda-GdaDataSelect;
- &libgda-GdaColumn;
- &libgda-GdaDataModelIter;
- &libgda-GdaDataModelImport;
- &libgda-GdaDataAccessWrapper;
- &libgda-GdaDataModelArray;
- &libgda-GdaRow;
- &libgda-GdaDataModelBdb;
- &libgda-GdaDataModelDir;
- &libgda-GdaDataProxy;
- &libgda-GdaDataComparator;
+ <xi:include href="xml/gda-value.xml"/>
+ <xi:include href="data_validation.xml"/>
+ <xi:include href="data_select.xml"/>
+ <xi:include href="xml/gda-blob-op.xml"/>
+ <xi:include href="xml/gda-data-model.xml"/>
+ <xi:include href="xml/gda-data-select.xml"/>
+ <xi:include href="xml/gda-column.xml"/>
+ <xi:include href="xml/gda-data-model-iter.xml"/>
+ <xi:include href="xml/gda-data-model-import.xml"/>
+ <xi:include href="xml/gda-data-access-wrapper.xml"/>
+ <xi:include href="xml/gda-data-model-array.xml"/>
+ <xi:include href="xml/gda-row.xml"/>
+ <xi:include href="xml/gda-data-model-bdb.xml"/>
+ <xi:include href="xml/gda-data-model-dir.xml"/>
+ <xi:include href="xml/gda-data-proxy.xml"/>
+ <xi:include href="xml/gda-data-comparator.xml"/>
</chapter>
<chapter id="trees">
@@ -910,14 +771,14 @@ else {
g_object_unref (tree);
</programlisting>
</para>
- &libgda-GdaTree;
- &libgda-GdaTreeManager;
- &libgda-GdaTreeNode;
- &libgda-GdaTreeMgrLabel;
- &libgda-GdaTreeMgrSelect;
- &libgda-GdaTreeMgrSchemas;
- &libgda-GdaTreeMgrTables;
- &libgda-GdaTreeMgrColumns;
+ <xi:include href="xml/gda-tree.xml"/>
+ <xi:include href="xml/gda-tree-manager.xml"/>
+ <xi:include href="xml/gda-tree-node.xml"/>
+ <xi:include href="xml/gda-tree-mgr-label.xml"/>
+ <xi:include href="xml/gda-tree-mgr-select.xml"/>
+ <xi:include href="xml/gda-tree-mgr-schemas.xml"/>
+ <xi:include href="xml/gda-tree-mgr-tables.xml"/>
+ <xi:include href="xml/gda-tree-mgr-columns.xml"/>
</chapter>
<chapter id="data_conv">
@@ -949,13 +810,13 @@ g_object_unref (tree);
</listitem>
</itemizedlist>
</para>
- &libgda-GdaDataHandler;
- &libgda-GdaHandlerString;
- &libgda-GdaHandlerBoolean;
- &libgda-GdaHandlerTime;
- &libgda-GdaHandlerNumerical;
- &libgda-GdaHandlerBin;
- &libgda-GdaHandlerType;
+ <xi:include href="xml/gda-data-handler.xml"/>
+ <xi:include href="xml/gda-handler-string.xml"/>
+ <xi:include href="xml/gda-handler-boolean.xml"/>
+ <xi:include href="xml/gda-handler-time.xml"/>
+ <xi:include href="xml/gda-handler-numerical.xml"/>
+ <xi:include href="xml/gda-handler-bin.xml"/>
+ <xi:include href="xml/gda-handler-type.xml"/>
</chapter>
<chapter id="gda-dict">
@@ -1272,64 +1133,64 @@ g_object_unref (store);
</sect2>
<!-- tables and views documentation -->
- &i-s-doc;
+ <xi:include href="i_s_doc.xml"/>
</sect1>
- &libgda-GdaMetaStore;
- &libgda-GdaMetaStruct;
+ <xi:include href="xml/gda-meta-store.xml"/>
+ <xi:include href="xml/gda-meta-struct.xml"/>
</chapter>
<chapter>
<title>Data definition (DDL) queries</title>
- &libgda-serverop-intro;
- &libgda-GdaServerOperation;
- &libgda-GdaServerOperationNodes;
- &libgda-GdaServerOperationSequences;
+ <xi:include href="server-operation.xml"/>
+ <xi:include href="xml/gda-server-operation.xml"/>
+ <xi:include href="xml/gda-server-operation-nodes.xml"/>
+ <xi:include href="xml/gda-server-operation-sequences.xml"/>
</chapter>
<chapter>
<title>User interface API reference</title>
- &visual-index;
-
- &libgdaui-init;
- &libgdaui-GdauiLogin;
- &libgdaui-GdauiProviderSelector;
-
- &libgdaui-GdauiDataSelector;
- &libgdaui-GdauiDataProxy;
- &libgdaui-GdauiBasicForm;
- &libgdaui-GdauiForm;
- &libgdaui-GdauiRawForm;
- &libgdaui-GdauiGrid;
- &libgdaui-GdauiRawGrid;
- &libgdaui-GdauiCombo;
- &libgdaui-GdauiCloud;
- &libgdaui-GdauiRtEditor;
-
- &libgdaui-gdaui-plugins;
-
- &libgdaui-GdauiDataEntry;
- &libgdaui-GdauiDataStore;
- &libgdaui-GdauiDataFilter;
- &libgdaui-GdauiDataProxyInfo;
- &libgdaui-GdauiServerOperation;
- &libgdaui-GdauiTreeStore;
-
- &libgdaui-gdaui-easy;
+ <xi:include href="visual_index.xml"/>
+
+ <xi:include href="xml/libgdaui.xml"/>
+
+ <xi:include href="xml/gdaui-login.xml"/>
+ <xi:include href="xml/gdaui-provider-selector.xml"/>
+
+ <xi:include href="xml/gdaui-data-selector.xml"/>
+ <xi:include href="xml/gdaui-data-proxy.xml"/>
+ <xi:include href="xml/gdaui-basic-form.xml"/>
+ <xi:include href="xml/gdaui-form.xml"/>
+ <xi:include href="xml/gdaui-raw-form.xml"/>
+ <xi:include href="xml/gdaui-grid.xml"/>
+ <xi:include href="xml/gdaui-raw-grid.xml"/>
+ <xi:include href="xml/gdaui-combo.xml"/>
+ <xi:include href="xml/gdaui-cloud.xml"/>
+ <xi:include href="xml/gdaui-rt-editor.xml"/>
+ <xi:include href="xml/gdaui-plugins.xml"/>
+
+ <xi:include href="xml/gdaui-data-entry.xml"/>
+ <xi:include href="xml/gdaui-data-store.xml"/>
+ <xi:include href="xml/gdaui-data-filter.xml"/>
+ <xi:include href="xml/gdaui-data-proxy-info.xml"/>
+ <xi:include href="xml/gdaui-server-operation.xml"/>
+ <xi:include href="xml/gdaui-tree-store.xml"/>
+
+ <xi:include href="xml/gdaui-easy.xml"/>
</chapter>
<chapter id="multi-threading">
<title>Multi threading</title>
- &libgda-GdaMutex;
- &libgda-GdaLockable;
- &libgda-GdaThreadWrapper;
+ <xi:include href="xml/gda-mutex.xml"/>
+ <xi:include href="xml/gda-lockable.xml"/>
+ <xi:include href="xml/gda-thread-wrapper.xml"/>
</chapter>
<chapter id="misc">
<title>Miscellaneous</title>
- &libgda-util;
- &libgda-log;
- &GdaAttributesManager;
+ <xi:include href="xml/gda-util.xml"/>
+ <xi:include href="xml/gda-log.xml"/>
+ <xi:include href="xml/gda-attributes-manager.xml"/>
</chapter>
</part>
@@ -1701,10 +1562,10 @@ g_object_unref (eng);
</chapter>
<chapter>
<title>API reference</title>
- &libgda-GdaReportEngine;
- &libgda-GdaReportDocument;
- &libgda-GdaReportDocbookDocument;
- &libgda-GdaReportRmlDocument;
+ <xi:include href="xml/gda-report-engine.xml"/>
+ <xi:include href="xml/gda-report-document.xml"/>
+ <xi:include href="xml/gda-report-docbook-document.xml"/>
+ <xi:include href="xml/gda-report-rml-document.xml"/>
</chapter>
</part>
@@ -1726,10 +1587,7 @@ g_object_unref (eng);
</chapter>
</part>
- <part id="gda-sql">
- <title>Gda SQL console's user manual</title>
- &GdaSqlManual;
- </part>
+ <xi:include href="gda-sql-manual.xml"/>
<part id="part_providers">
<title>Databases providers for developers</title>
@@ -1765,62 +1623,66 @@ g_object_unref (eng);
<link linkend="psupport">Providers' support API</link> section.
</para>
+ <chapter>
+ <title>Getting started</title>
+ <para>
+ &LIBGDA;'s sources contain templates to get started in creating a new database provider. The following templates
+ are available:
+ <itemizedlist>
+ <listitem><para>the template in the <filename class="directory">providers/skel-implementation/capi</filename>
+ directory which can be used when writing a provider using the database's C or C++ API (for example
+ the PostgreSQL or MySQL providers)</para></listitem>
+ <listitem><para>the template in the <filename class="directory">providers/skel-implementation/models</filename>
+ directory which can be used when writing a provider for a system which is not a relational database (or
+ does offer a very limited API, such as for the MS Access or Berkeley DB systems).</para></listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ In any case, for example to create a DummyDb provider, follow these steps:
+ <itemizedlist>
+ <listitem><para>copy one of the template's directory into a new directory named
+ <filename class="directory">dummydb</filename></para></listitem>
+ <listitem><para>From inside that new directory, run the
+ <filename class="directory">providers/prepare_provider_sources.sh</filename> script with the name
+ of the provider as sole argument ("dummydb" here), which replaces
+ all the class and object names with the name of the provider and renames the files correctly. These
+ new sources should be compilable without any modification.</para></listitem>
+ <listitem><para>Edit the <filename>Makefile.am</filename> to add provider specific compilation and link
+ flags</para></listitem>
+ <listitem><para>Integrate the provider's new code into a compilation unit: either &LIBGDA;'s sources in
+ the <filename class="directory">providers</filename>directory or in your own application (this step usually involves
+ modifying the <filename>configure.ac</filename> or <filename>configure.in</filename> files).</para></listitem>
+ <listitem><para>Implement the missing parts (it is usually a good idea to look how other provider's
+ implementations are done to get ideas).</para></listitem>
+ </itemizedlist>
+ </para>
+ </chapter>
+
+ <xi:include href="prov-writing-virtual-methods.xml"/>
+ <xi:include href="prov-writing-recordsets.xml"/>
+ <xi:include href="prov-writing-blobs.xml"/>
+ <xi:include href="prov-writing-parser.xml"/>
+ <xi:include href="prov-writing-assembly.xml"/>
<chapter id="psupport">
<title>Providers' support API</title>
- &libgda-GdaServerProvider;
- &libgda-GdaDataSelectPriv;
- &libgda-PStmt;
- &libgda-quark-list;
- &provider-support-sql;
- &provider-support;
+ <xi:include href="xml/gda-server-provider.xml"/>
+ <xi:include href="xml/gda-data-select-priv.xml"/>
+ <xi:include href="xml/gda-pstmt.xml"/>
+ <xi:include href="xml/gda-quark-list.xml"/>
+ <xi:include href="xml/provider-support-sql.xml"/>
+ <xi:include href="xml/provider-support.xml"/>
</chapter>
-<sect1>
- <title>Getting started</title>
- <para>
- &LIBGDA;'s sources contain templates to get started in creating a new database provider. The following templates
- are available:
- <itemizedlist>
- <listitem><para>the template in the <filename class="directory">providers/skel-implementation/capi</filename>
- directory which can be used when writing a provider using the database's C or C++ API (for example
- the PostgreSQL or MySQL providers)</para></listitem>
- <listitem><para>the template in the <filename class="directory">providers/skel-implementation/models</filename>
- directory which can be used when writing a provider for a system which is not a relational database (or
- does offer a very limited API, such as for the MS Access or Berkeley DB systems).</para></listitem>
- </itemizedlist>
- </para>
- <para>
- In any case, for example to create a DummyDb provider, follow these steps:
- <itemizedlist>
- <listitem><para>copy one of the template's directory into a new directory named
- <filename class="directory">dummydb</filename></para></listitem>
- <listitem><para>From inside that new directory, run the
- <filename class="directory">providers/prepare_provider_sources.sh</filename> script with the name
- of the provider as sole argument ("dummydb" here), which replaces
- all the class and object names with the name of the provider and renames the files correctly. These
- new sources should be compilable without any modification.</para></listitem>
- <listitem><para>Edit the <filename>Makefile.am</filename> to add provider specific compilation and link
- flags</para></listitem>
- <listitem><para>Integrate the provider's new code into a compilation unit: either &LIBGDA;'s sources in
- the <filename class="directory">providers</filename>directory or in your own application (this step usually involves
- modifying the <filename>configure.ac</filename> or <filename>configure.in</filename> files).</para></listitem>
- <listitem><para>Implement the missing parts (it is usually a good idea to look how other provider's
- implementations are done to get ideas).</para></listitem>
- </itemizedlist>
- </para>
- </sect1>
- &provider-writing;
</part>
<part>
<title>Packaging</title>
- &packaging;
- &packaging-ui;
+ <xi:include href="packaging.xml"/>
+ <xi:include href="packaging_ui.xml"/>
</part>
<part id="part_index">
<title>Appendix</title>
- &fdl-appendix;
<index id="index_main">
<title>Index</title>
</index>
@@ -1842,7 +1704,7 @@ g_object_unref (eng);
<index id="index-deprecated" role="deprecated">
<title>Index of deprecated symbols</title>
</index>
- &fdl-appendix;
+ <xi:include href="fdl-appendix.sgml"/>
</part>
</book>
diff --git a/doc/C/limitations.xml b/doc/C/limitations.xml
index e510951..066a7a4 100644
--- a/doc/C/limitations.xml
+++ b/doc/C/limitations.xml
@@ -1,3 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
<chapter id="limitations">
<title>Limitations</title>
diff --git a/doc/C/migration.xml b/doc/C/migration.xml
index f5e38d7..cdd17a8 100644
--- a/doc/C/migration.xml
+++ b/doc/C/migration.xml
@@ -1,3 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<chapter id="migration-1">
<title>Migration from 1.X versions</title>
<sect1><title>GdaValue and GdaDataModel changes</title>
diff --git a/doc/C/migration2.xml b/doc/C/migration2.xml
index 9db3d90..a1a893c 100644
--- a/doc/C/migration2.xml
+++ b/doc/C/migration2.xml
@@ -1,4 +1,9 @@
-<chapter id="migration-2">
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
+<chapter id="migration-2" xmlns:xi="http://www.w3.org/2003/XInclude">
<title>Migration from 3.X versions</title>
<sect1><title>Overview</title>
<para>Version 4.0 of &LIBGDA; is a major rework of the library for the following benefits:
diff --git a/doc/C/packaging.xml b/doc/C/packaging.xml
index b6e128e..ba79090 100644
--- a/doc/C/packaging.xml
+++ b/doc/C/packaging.xml
@@ -1,3 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
<chapter id="libgda-packaging">
<title>Packaging &LIBGDA;</title>
<para>
diff --git a/doc/C/packaging_ui.xml b/doc/C/packaging_ui.xml
index ba9a941..3683eda 100644
--- a/doc/C/packaging_ui.xml
+++ b/doc/C/packaging_ui.xml
@@ -1,3 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
<chapter id="libgdaui-packaging">
<title>Packaging &LIBGDA; UI extension</title>
<para>
diff --git a/doc/C/prov-notes.xml b/doc/C/prov-notes.xml
index 91f1292..9fda183 100644
--- a/doc/C/prov-notes.xml
+++ b/doc/C/prov-notes.xml
@@ -1,3 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<chapter id="provider-notes">
<title>Provider's notes</title>
diff --git a/doc/C/prov-writing-assembly.xml b/doc/C/prov-writing-assembly.xml
new file mode 100644
index 0000000..cdb37c7
--- /dev/null
+++ b/doc/C/prov-writing-assembly.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
+<chapter id="libgda-provider-pack">
+ <title>Assembling all the parts</title>
+ <para>
+ A database provider is in fact a shared library which is loaded when &LIBGDA; is initialized. The skeleton implementations
+ in <filename class="directory">providers/skel-implementation</filename> propose the following files layout (some of the files
+ are not required for virtual providers).
+ </para>
+ <para> Of course this files layout is not required, but make it easy for maintenance. In the following list,
+ the filenames here are the one for the "Capi" provider, and each provider should rename them:
+ <itemizedlist>
+ <listitem><para><filename>gda-capi.h</filename>: contains the provider name, the include files necessary to use the API and the
+ declaration of the provider's specific connection data</para></listitem>
+ <listitem><para><filename>gda-capi-provider.[ch]</filename>: are the header and implementation files for the object
+ inheriting the <link linkend="GdaServerProvider">GdaServerProvider</link> object. This object must implement its
+ <link linkend="libgda-provider-class">virtual methods</link>.</para></listitem>
+ <listitem><para><filename>gda-capi-recordset.[ch]</filename>: are the header and implementation files for the object
+ inheriting the <link linkend="GdaDataSelect">GdaDataSelect</link> object. This object must implement its
+ <link linkend="libgda-provider-recordset">virtual methods</link>.</para></listitem>
+ <listitem><para><filename>gda-capi-ddl.[ch]</filename>: are the files implementing the DDL queries</para></listitem>
+ <listitem><para><filename>gda-capi-parser.[ch]</filename>: are the header and implementation files
+ for the object implementing a specific parser,
+ inheriting <link linkend="GdaSqlParser">GdaSqlParser</link>, see the PostgreSQL provider's implementation for
+ example.</para></listitem>
+ <listitem><para><filename>gda-capi-pstmt.[ch]</filename>: are the header and implementation files for the object
+ representing prepared statement and inheriting <link linkend="GdaPStmt">GdaPStmt</link></para></listitem>
+ <listitem><para><filename>gda-capi-blob-op.[ch]</filename>: are the header and implementation files for the object
+ inheriting the <link linkend="GdaBlobOp">GdaBlopOp</link> object. This object must implement its
+ <link linkend="libgda-provider-blobop">virtual methods</link>.</para></listitem>
+ <listitem><para><filename>gda-capi-meta.[ch]</filename>: are the files where the meta-data information extraction
+ is implemented.</para></listitem>
+ <listitem><para><filename>libmain.c</filename>: file to make it possible for &LIBGDA; to identify the provider.</para></listitem>
+ <listitem><para><filename>capi_specs_dsn.xml.in</filename>: file where the connection parameters are described,
+ before being translated</para></listitem>
+ <listitem><para><filename>libgda-capi-5.0.pc.in</filename>: file to be used by <command>pkg-config</command> to identify
+ the provider, before being computed by the <command>configure</command> script.</para></listitem>
+ <listitem><para>other .xml.in files: DDL queries' parameters, before translation</para></listitem>
+ </itemizedlist>
+ </para>
+
+ <sect1>
+ <title>libmain.c</title>
+ <para>
+ Once the shared library implementing the provider is loaded (and
+ all the necessary dependencies are also loaded), &LIBGDA; tries to locate some functions to identify the provider (if any of
+ these function is missing, then the DLL is unloaded and the provider is not availaibe).
+ </para>
+ <para>
+ The skeleton implementations in <filename class="directory">providers/skel-implementation</filename> propose to implement those
+ functions in a <filename>libmain.c</filename> file. The functions are the following ones:
+ </para>
+ <sect2>
+ <title>plugin_init()</title>
+ <para>This function initializes the plugin; it has a single argument which is the path where the provider is.
+ As the module can be unloaded, any static data allocated here must be freed when the module is unloaded,
+ in a <link linkend="GModuleUnload">g_module_unload()</link> function. If the module must not be
+ unloaded, it must be made resident using <link linkend="g-module-make-resident">g_module_make_resident()</link>,
+ in a <link linkend="GModuleCheckInit">g_module_check_init()</link> function</para>
+ <para>Note that after a <link linkend="GdaServerProvider">GdaServerProvider</link> object has been
+ created (ie after plugin_create_provider() has
+ been called once), the module will not be unloaded anymore.</para>
+ </sect2>
+ <sect2>
+ <title>plugin_get_name()</title>
+ <para>This funtion returns the name of the provider, it <emphasis>must</emphasis> return the same string as what the
+ <link linkend="prov-get-name">get_name()</link>'s provider's virtual method returns.</para>
+ </sect2>
+ <sect2>
+ <title>plugin_get_description()</title>
+ <para>This funtion returns a description of the provider.</para>
+ </sect2>
+ <sect2>
+ <title>plugin_get_dsn_spec()</title>
+ <para>This function returns a description of the parameters which have or can be set when opening a connection. This
+ description uses an XML syntax and is usually stored in a separate XML file (for easier translation).</para>
+ <para>Here is an example, when only one "DB_NAME" parameter is required:
+ <programlisting>
+<?xml version="1.0"?>
+<data-set-spec>
+ <parameters>
+ <parameter id="DB_NAME" _name="Database name" _descr="The name of a database to use" gdatype="gchararray" nullok="FALSE"/>
+ </parameters>
+</data-set-spec>
+ </programlisting>
+ Note that the the attributes which have a name starting with an underscore should be translated (see the
+ <filename>Makefile.am</filename> file for some example on ho this is done).
+ </para>
+ </sect2>
+ <sect2>
+ <title>plugin_get_auth_spec()</title>
+ <para>
+ This function returns a description of the authentication information required by the provider. If the
+ only information is a username/password pair, then it is not necessary to implement that function.
+ </para>
+ <para>
+ However, if a username is required, then it must be name "USERNAME", and if a password is required,
+ it must be named "PASSWORD".
+ </para>
+ </sect2>
+ <sect2>
+ <title>plugin_create_provider()</title>
+ <para>This function actually instantiates a provider object and returns it.</para>
+ </sect2>
+ </sect1>
+
+</chapter>
diff --git a/doc/C/prov-writing-blobs.xml b/doc/C/prov-writing-blobs.xml
new file mode 100644
index 0000000..25808cf
--- /dev/null
+++ b/doc/C/prov-writing-blobs.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
+<chapter id="libgda-provider-blobop">
+ <title>Virtual methods for Blob operations</title>
+ <para>
+ Blobs are a special feature of databases because they allow one to access the contents of a "cell" from the
+ API without using SQL (usually no SQL can be used to manipulate a blob's contents: an SQL statement is used to
+ create, delete or retrieve a blob, but the contents is accessed through the API).
+ </para>
+ <para>
+ &LIBGDA; encapsulates all blob operations in objects which must be implemented by each provider if they want to support
+ blobs; otherwise binary data may still be used if supported by the database, but the whole binary data is transferred in
+ the SQL statement which is not suitable for large data.
+ </para>
+ <para>
+ &LIBGDA; defines <link linkend="GdaBlop">GdaBlob</link> structure which is an extension of the
+ <link linkend="GdaBinary">GdaBinary</link> structure (which contains a pointer to some data and the size of the pointed
+ data). The extension simply adds a pointer to a <link linkend="GdaBlopOp">GdaBlobOp</link> object which has
+ to be implemented by each provider which supports blobs. The following documents the
+ <link linkend="GdaBlopOp">GdaBlobOp</link>'s virtual methods which actually implement the reading from and
+ writing to a blob contained in the database.
+ </para>
+ <para>
+ When reading from a blob in the database or writing to a blob in the database, data read or written is the stored in
+ the <link linkend="GdaBinary">GdaBinary</link> part of the <link linkend="GdaBlopOp">GdaBlobOp</link>.
+ </para>
+ <sect2>
+ <title>get_length()</title>
+ <para>
+ This method returns the total length of a blob in bytes. In case of error, -1 is returned and the
+ provider should have added an error (a <link linkend="GdaConnectionEvent">GdaConnectionEvent</link>) to the connection.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>read()</title>
+ <para>
+ This method requests that some data be read from the blob. The data read must be stored in the
+ <link linkend="GdaBinary">GdaBinary</link> part of the <parameter>blob</parameter> parameter. The data to read is
+ the data starting at the <parameter>offset</parameter> offset from the beginning of the blob, and
+ of the <parameter>size</parameter> length.
+ </para>
+ <para>
+ Note that in this method, the <structfield>op</structfield> attribute of the <parameter>blob</parameter>
+ parameter is not used.
+ </para>
+ <para>
+ The returned value is the number of bytes read, or -1 if an error
+ occured (then the provider should have added an error to the connection).
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>write()</title>
+ <para>
+ This method requests the some data be written to the blob. The data has to be written
+ in the blob starting at the <parameter>offset</parameter> offset from the beginning of the blob.
+ </para>
+ <para>
+ If the <structfield>op</structfield> attribute of the <parameter>blob</parameter> parameter is not NULL and is different
+ than the <parameter>op</parameter>, then the data to be written is the complete contents of the data stored in the
+ blob represented by the <structfield>op</structfield> attribute of the <parameter>blob</parameter> parameter. Otherwise
+ The data to be written is stored in the
+ <link linkend="GdaBinary">GdaBinary</link> part of the <parameter>blob</parameter>.
+ </para>
+ <para>
+ The returned value is the number of bytes written, or -1 if an error
+ occured (then the provider should have added an error to the connection).
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>write_all()</title>
+ <para>
+ This method requests that all the contents of the blob be replaced by some data (if necessary the
+ blob is truncated from its previous length). The data to be written is the same as for the write() method, and
+ the returned value is also the same.
+ </para>
+ <para>
+ If this virtual method is not implemented, then the write() virtual method is used with an <parameter>offset</parameter>
+ parameter of 0.
+ </para>
+ </sect2>
+</chapter>
diff --git a/doc/C/prov-writing-parser.xml b/doc/C/prov-writing-parser.xml
new file mode 100644
index 0000000..3fe1e0e
--- /dev/null
+++ b/doc/C/prov-writing-parser.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
+<chapter id="libgda-provider-parser" xmlns:xi="http://www.w3.org/2003/XInclude">
+ <title>SQL parser</title>
+ <para>
+ &LIBGDA; implements a generic SQL parser which creates <link linkend="GdaStatement">GdaStatement</link> objects from
+ an SQL string. If the database provider needs to implement its own parser because the generic one does not handle
+ the database specific SQL syntax, it can be done using instructions in this chapter. Otherwise, the provider's sources
+ can be cleared of any code related to the parser.
+ </para>
+ <sect1>
+ <title>Implementation overview</title>
+ <para>
+ This section describes how the generic SQL parser and a provider specific parser are built regarding the files
+ and programs which are involved.
+ </para>
+ <sect2>
+ <title>Generic SQL parser</title>
+ <para>
+ The <link linkend="GdaSqlParser">GdaSqlParser</link> object can parse any SQL string of any SQL dialect,
+ while always identifying the variables (which have a &LIBGDA;'s specific syntax) in the string. If the parser
+ can identify a structure in the SQL string it understands, then it internally builds a
+ <link linkend="GdaSqlStatement">GdaSqlStatement</link> structure of the correct type, and if it cannot then is simply
+ delimits parts in the SQL string to identify variables and also builds a
+ <link linkend="GdaSqlStatement">GdaSqlStatement</link> structure but of
+ <link linkend="GDA-SQL-STATEMENT-UNKNOWN:CAPS">GDA_SQL_STATEMENT_UNKNOWN</link>. If the string
+ cannot be delimited and variables identified, then it returns an error (usually there is a quotes mismatch problem
+ within the SQL string).
+ </para>
+ <para>
+ Failing to identify a known structure in the SQL string can have several reasons:
+ <itemizedlist>
+ <listitem><para>the SQL string is not one of the known types of statements (see
+ <link linkend="GdaSqlStatementType">GdaSqlStatementType</link>)</para></listitem>
+ <listitem><para>the SQL uses some database specific extensions</para></listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ The generic SQL parser implementation has its source files in the
+ <filename class="directory">libgda/sql-parser</filename> directory; the files which actually implement
+ the parser itself are the <filename>parser.y</filename>, <filename>delimiter.y</filename> and
+ <filename>parser_tokens.h</filename> files:
+ <itemizedlist>
+ <listitem><para>The <filename>parser.y</filename> file contains the grammar used by the parser</para></listitem>
+ <listitem><para>The <filename>delimiter.y</filename> file contains the grammar used by the parser when it
+ is operating as a delimiter</para></listitem>
+ <listitem><para>The <filename>parser_tokens.h</filename> defines some hard coded tokens</para></listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ The parser grammar files use the <ulink url="http://www.hwaci.com/sw/lemon/">Lemon parser generator</ulink> syntax
+ which is a LALR parser similar to <application>YACC</application> or <application>bison</application>. The lexer part
+ however is not <application>LEX</application> but is a custom one integrated in the
+ <filename>gda-sql-parser.c</filename> file (this allows a better integration between the lexer and parser parts).
+ </para>
+ <para>
+ The following figure illustrates the files involved and how they are produced and used to create
+ the generic SQL parser.
+ <mediaobject>
+ <imageobject role="html">
+ <imagedata fileref="parser_gen.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Generic SQL parser's implementation</phrase>
+ </textobject>
+ </mediaobject>
+ <itemizedlist>
+ <listitem><para>The white background indicate files which are sources
+ (part of &LIBGDA;'s distribution)</para></listitem>
+ <listitem><para>The blue background indicate files that they are produced dynamically</para></listitem>
+ <listitem><para>The pink background indicate programs that are compiled and used themselves in
+ the compilation process to generate files. These programs are:
+ <itemizedlist>
+ <listitem><para><application>lemon</application>: the lemon parser itself</para></listitem>
+ <listitem><para><application>gen_def</application>: generated the "converters" arrays (see blow)</para>
+ </listitem>
+ </itemizedlist>
+ Note that none of these programs gets installed (and when cross compiling, they are compiled as programs
+ executing on the host actually making the compilation).
+ </para></listitem>
+ <listitem><para>The green background identifies components which are reused when implementing provider specific
+ parsers</para></listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ The tokenizer (AKA lexer) generates values identified by the "L_" prefix (for example "L_BEGIN"). Because
+ the GdaSqlParser object uses the same lexer with at least two different parsers (namely the parser and delimiter
+ mentioned earlier), and because the Lemon parser generator generates its own value identifiers for tokens, there
+ is a conversion step (the "converter" block in the diagram) which converts the "L_" prefixed tokens with the ones
+ usable by each parser (both converters are defined as arrays in the <filename>token_types.h</filename> file.
+ </para>
+ </sect2>
+ <sect2>
+ <title>Provider specific SQL parser</title>
+ <para>
+ One wants to write a database specific SQL parser when:
+ <itemizedlist>
+ <listitem><para>the SQL understood by the database differs from the generic SQL. For example
+ PostgreSQL associates priorities to the compound statement in a different way as the generic SQL.
+ In this case it is strongly recommended to write a custom SQL parser</para></listitem>
+ <listitem><para>the SQL understood by the database has specific extensions</para></listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ Using the same background color conventions as the previous diagram, the following diagram illustrates
+ the files involved and how they are produced and used to create a provider specific SQL parser:
+ </para>
+ <para>
+ <mediaobject>
+ <imageobject role="html">
+ <imagedata fileref="parser_prov.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Provider specific SQL parser's implementation</phrase>
+ </textobject>
+ </mediaobject>
+ </para>
+ <para>
+ The key differences are:
+ <itemizedlist>
+ <listitem><para>The delimiter part of the <link linkend="GdaSqlParser">GdaSqlParser</link> object
+ is the same as for the generic SQL parser implementation</para></listitem>
+ <listitem><para>While the <application>lemon</application> program is the same as for the generic SQL parser,
+ the <application>gen_def</application> is different, and takes as its input the ".h" file produced by
+ the <application>lemon</application> program and the <filename>libgda/sql-parser/token_types.h</filename>.
+ </para></listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+ </sect1>
+ <sect1>
+ <title>Tips to write a custom parser</title>
+ <para>
+ <itemizedlist>
+ <listitem><para>Write a new <filename>parser.y</filename> file (better to copy and adapt
+ it than starting from scratch)</para></listitem>
+ <listitem><para>Sub class the <link linkend="GdaSqlParser">GdaSqlParser</link> class and "connect" the
+ class's virtual methods to the new generated parser</para></listitem>
+ <listitem><para>Start from the skeleton implementation</para></listitem>
+ </itemizedlist>
+ </para>
+ </sect1>
+ <xi:include href="xml/gda-sql-statement.xml"/>
+</chapter>
diff --git a/doc/C/prov-writing-recordsets.xml b/doc/C/prov-writing-recordsets.xml
new file mode 100644
index 0000000..04bbd40
--- /dev/null
+++ b/doc/C/prov-writing-recordsets.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
+<chapter id="libgda-provider-recordset">
+ <title>Virtual methods for recordsets</title>
+ <para>
+ This section explains how to write virtual methods for the <link linkend="GdaDataSelect">GdaDataSelect</link> subclasses
+ implementations, which should be done when implementing a database provider.
+ </para>
+ <para>
+ That data model implementation simplifies the implementation of provider's recordsets by having them implement only a
+ few virtual methods, and offering some services.
+ </para>
+ <para>
+ The data model represents each row in a separate <link linkend="GdaRow">GdaRow</link> object, and virtual
+ methods to retrieve rows have to return new (and correctly initialized) objects of that class. The referencing
+ of these new objects is left up to the implementation which:
+ <itemizedlist>
+ <listitem>
+ <para>can rely on the <link linkend="GdaRow">GdaRow</link> implementation to keep them, using
+ the <link linkend="gda-data-select-take-row">gda_data_select_take_row ()</link> method for each row object created which
+ is the easiest, the fastest as once created, the rows are available for further usage,
+ but will consume more memory with each row read from the model.</para>
+ </listitem>
+ <listitem>
+ <para>can keep the references to these objects to the subclass implementation which will consume less memory but
+ will make it necessary to create a new row object each time a row is read which is slower</para>
+ </listitem>
+ <listitem>
+ <para>can do a mix of the two solutions above: monitor the memory usage for the data model to
+ enable to "cache" some rows and discard some when memory is needed</para>
+ </listitem>
+ </itemizedlist>
+ Note that the methods mentioned in the 1st and 3rd items should be reserved for random data access mode,
+ and that cursor based access mode should implement the method mentioned in th 2nd item.
+ </para>
+ <sect2>
+ <title>fetch_nb_rows()</title>
+ <para>
+ This method is called when the user calls <link linkend="gda-data-model-get-n-rows">gda_data_model_get_n_rows ()</link>.
+ </para>
+ <para>
+ Note that the number of rows of the data model may not be known until the cursor has reached the last row of
+ the recordset.
+ Once known, the number of rows can be stored in the <structfield>advertized_nrows</structfield>'s member of the
+ <link linkend="GdaDataSelect">GdaDataSelect</link> object.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>fetch_random()</title>
+ <para>
+ This method is called when the user calls <link linkend="gda-data-model-get-value-at">gda_data_model_get_value_at ()</link>,
+ and in available only when the data access mode for the data model is random (that is not cursor based). When data
+ access is cursor based, this method will not be called.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>store_all()</title>
+ <para>
+ This method is called when the user sets the "store-all-rows" to TRUE. It has the effect of forcing the creation
+ of a <link linkend="GdaRow">GdaRow</link> object for each row of the data model (thus increasing the memory consumption
+ but reducing further access times). It is available only when the data access mode for the data model is random
+ (that is not cursor based). When data access is cursor based, this method will not be called.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>fetch_next()</title>
+ <para>
+ This method is called when data access is cursor based and a data model iterator is moved one position forward. The
+ <parameter>rownum</parameter> is an indication of what the row number will be once the next row has been fetched (it can
+ safely be discarded if that information is not necessary).
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>fetch_prev()</title>
+ <para>
+ This method is called when data access is cursor based and a data model iterator is moved one position backward. The
+ <parameter>rownum</parameter> is an indication of what the row number will be once the previous row has been fetched (it can
+ safely be discarded if that information is not necessary).
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>fetch_at()</title>
+ <para>
+ This method can be implemented when data access is cursor based and there is a shorter way of getting to a
+ specific row than having to call the fetch_next() or fetch_prev() methods several times.
+ </para>
+ </sect2>
+</chapter>
diff --git a/doc/C/prov-writing-virtual-methods.xml b/doc/C/prov-writing-virtual-methods.xml
new file mode 100644
index 0000000..9329dc0
--- /dev/null
+++ b/doc/C/prov-writing-virtual-methods.xml
@@ -0,0 +1,596 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
+<chapter id="libgda-provider-class">
+ <title>Virtual methods for providers</title>
+ <para>
+ Database providers usually (that is except for <emphasis>virtual</emphasis> providers explained later) subclass
+ the <link linkend="GdaServerProvider">GdaServerProvider</link> class and implement at least the mandatory
+ virtual methods.
+ </para>
+ <para>
+ Virtual providers are database providers when the database engine accessed does not support SQL (or
+ supports it poorly), such as Berkeley databases or MDB (or even LDAP). These provider's implementation's
+ design is to create <link linkend="GdaDataModel">GdaDataModel</link> data model objects and make
+ each of them appear as a named table once the connection is opened. For example the MDB provider creates
+ a read-only data model for each table in an MDB file and make it appear using the original table
+ name used in MS Access (the tables cannot be modified but it is possible to use all SQLite's SQL
+ to make SELECT queries).
+ </para>
+ <para>
+ Virtual providers inherit the <link linkend="GdaVproviderDataModel">GdaVproviderDataModel</link> class
+ and not the <link linkend="GdaServerProvider">GdaServerProvider</link> as "normal" providers do,
+ and the number of virtual methods to implement is very limited: only the <link linkend="prov-get-name">get_name()</link>,
+ <link linkend="prov-get-version">get_version()</link>, <link linkend="prov-get-server-version">get_server_version()</link>,
+ <link linkend="prov-open-connection">open_connection()</link> and <link linkend="prov-get-database">get_database()</link>
+ should be implemented, optionnally the <link linkend="prov-close-connection">close_connection()</link> can
+ also be implemented.
+ </para>
+
+ <sect1>
+ <title>Synchronous / asynchronous mode</title>
+ <para>
+ All the provider's commands are executed in a synchronous mode (the caller is blocked until the provider's
+ method terminates). However some virtual methods have the a <parameter>task_id</parameter> parameter,
+ an <parameter>async_cb</parameter> or <parameter>exec_cb</parameter> callback function pointer and
+ a <parameter>cb_data</parameter> parameter which can be set when an asynchronous mode
+ is required; asynchronous mode is requested if and only if the <parameter>async_cb</parameter> or
+ <parameter>exec_cb</parameter> parmeter is not NULL.
+ </para>
+ <para>
+ When an asynchronous mode is requested, the method should return TRUE if it returns a boolean or NULL if it returns a
+ pointer and set a task identifier
+ into the <parameter>task_id</parameter> parameter if not NULL. The task identifier is passed again when
+ the <parameter>async_cb</parameter> or <parameter>exec_cb</parameter> callback functions are called by the
+ provider when the execution is finished.
+ </para>
+ <para>
+ When the provider's method terminates, it then should call the function passed as <parameter>async_cb</parameter>
+ with the <parameter>cb_data</parameter> as last parameters.
+ </para>
+ </sect1>
+
+ <sect1>
+ <title>Multi threaded environment</title>
+ <para>
+ Each database provider should be usable in a multi threaded environment, even if they impose some restrictions
+ as to how they can be used in such an environment. The &LIBGDA;'s framework provides some locking mechanism which
+ is:
+ <itemizedlist>
+ <listitem><para>if multi threading cannot be supported at all (for example if the client library internally
+ used by the provider does not support it), then the provider's
+ class implementation should set the class's <structfield>limiting_thread</structfield> attribute to:
+ the GDA_SERVER_PROVIDER_UNDEFINED_LIMITING_THREAD constant.
+ This constant will be resolved at run time as the thread which creates the 1st connection using that
+ provider.</para>
+ </listitem>
+ <listitem><para>if multi threading is supported but any connection (or related object) can only be
+ used by the thread in which it was created, then for each opened connection, the
+ "<link linkend="GdaConnection--thread-owner">thread-owner</link>" connection's property
+ must be set to the current thread (and other related objects must be locked in a similar way)</para>
+ </listitem>
+ <listitem><para>if no locking is done, then the provider is assumed to support full multi threading access,
+ in this case make sure to set class's <structfield>limiting_thread</structfield> attribute to the NULL constant.</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ Note that the default provider's class value for the <structfield>limiting_thread</structfield> is safely set to the
+ GDA_SERVER_PROVIDER_UNDEFINED_LIMITING_THREAD constant.
+ </para>
+ </sect1>
+
+ <sect1>
+ <title>Methods - provider's information</title>
+ <sect2 id="prov-get-name">
+ <title>get_name() - mandatory</title>
+ <para>This method returns the name of the provider; it should only contain alphanumeric characters.</para>
+ </sect2>
+ <sect2 id="prov-get-version">
+ <title>get_version() - mandatory</title>
+ <para>This method returns the version of the provider (providers built as part of &LIBGDA; have the same
+ version as &LIBGDA;).</para>
+ </sect2>
+ <sect2 id="prov-get-server-version">
+ <title>get_server_version() - mandatory</title>
+ <para>This method returns the version of the database server to which a connection is opened</para>
+ </sect2>
+ <sect2>
+ <title>supports_feature()</title>
+ <para>This method allows one to ask the provider if some specific features are available</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Methods - connection management</title>
+ <sect2 id="prov-open-connection">
+ <title>open_connection() - mandatory</title>
+ <para>
+ This method actually opens a connection to the database.
+ </para>
+ <para>
+ Any data specific to the connection (such as
+ a database handle created by the database API when opening the connection) must be stored in a private structure
+ (which should be defined in the <filename>gda-<providername>.h</filename> file as a
+ <classname><Providername>ConnectionData</classname>); this private structure's adress should be
+ "attached" to the <link linkend="GdaConnection">GdaConnection</link> object using the
+ <link linkend="gda-connection-internal-set-provider-data">gda_connection_internal_set_provider_data()</link>.
+ </para>
+ </sect2>
+ <sect2 id="prov-close-connection">
+ <title>close_connection() - mandatory</title>
+ <para>
+ This method actually closes a connection previously opened by the
+ <link linkend="prov-open-connection">open_connection()</link> virtual method. This method is not mandatory for
+ virtual providers.
+ </para>
+ <para>
+ The connection specific data for the database API can be retrieved using the
+ <link linkend="gda-connection-internal-get-provider-data">gda_connection_internal_get_provider_data()</link> method.
+ </para>
+ </sect2>
+ <sect2>
+ <title>get_database()</title>
+ <para>This method returns the name of the database to which a connection is opened.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Methods - DDL queries</title>
+ <para>
+ This group of virtual methods is composed of virtual methods which make it possible to handle DDL (data definition) queries
+ to be executed using descriptions of the data required for each kind of DDL query, rather than using SQL directly (because
+ DDL SQL is usually very database specific and must thus be adapted when migrating to another database type). For more
+ information, see the <link linkend="DDLIntro">global introduction to DDL queries</link>.
+ </para>
+ <para>
+ Implementing these methods is not mandatory, and virtual provider's implementation should not implement them.
+ </para>
+ <sect2>
+ <title>supports_operation()</title>
+ <para>
+ This virtual method tells if a particular DDL query type is supported (DDL query types are identified as
+ <link linkend="GdaServerOperationType">GdaServerOperationType</link> enums).
+ </para>
+ </sect2>
+ <sect2>
+ <title>create_operation()</title>
+ <para>
+ This virtual method is used to create and initialize a <link linkend="GdaServerOperation">GdaServerOperation</link>
+ object.
+ </para>
+ </sect2>
+ <sect2>
+ <title>render_operation()</title>
+ <para>
+ This virtual method uses the information stored in a <link linkend="GdaServerOperation">GdaServerOperation</link> object
+ to create the SQL statement(s) which would be executed if the operation was performed.
+ </para>
+ <para>
+ Note: more than one SQL statement may be returned by this method
+ </para>
+ <para>
+ Note: some operations don't return any SQL at all, if the operation can only be done using an API (and not through SQL)
+ </para>
+ </sect2>
+ <sect2>
+ <title>perform_operation()</title>
+ <para>
+ This virtual method "performs" (execute) a <link linkend="GdaServerOperation">GdaServerOperation</link> object.
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Methods - transactions management</title>
+ <para>
+ When a connection has been opened and no transaction has been started, then the provider should execute queries in
+ auto commit mode.
+ </para>
+ <sect2>
+ <title>begin_transaction()</title>
+ <para>
+ This method starts a new transaction.
+ </para>
+ </sect2>
+ <sect2>
+ <title>commit_transaction()</title>
+ <para>
+ This method commits the current transaction.
+ </para>
+ </sect2>
+ <sect2>
+ <title>rollback_transaction()</title>
+ <para>
+ This method cancels the current transaction.
+ </para>
+ </sect2>
+ <sect2>
+ <title>add_savepoint()</title>
+ <para>
+ This method adds a save point to the current transaction, which allows for partial rollbacks within transactions.
+ </para>
+ </sect2>
+ <sect2>
+ <title>rollback_savepoint()</title>
+ <para>
+ This method rolls back to a previously defined save point within the current transaction.
+ </para>
+ </sect2>
+ <sect2>
+ <title>delete_savepoint()</title>
+ <para>
+ This method deletes a previously defined save point within the current transaction, it does not affect the
+ transaction but it simply won't be possible to roll back to the savepoint afterwards.
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Methods - DML queries</title>
+ <para>
+ This group of virtual methods is related to executing SQL queries of any kind. &LIBGDA; imposes that SQL
+ statements be converted to one or more <link linkend="GdaStatement">GdaStatement</link> object(s), each
+ GdaStatement object containing exactly one SQL statement (usually terminated
+ by a semi colon). Each GdaStatement can then be prepared and/or executed individually.
+ </para>
+ <para>
+ Creating a <link linkend="GdaStatement">GdaStatement</link> object from some SQL is the job of a
+ <link linkend="GdaSqlParser">GdaSqlParser</link> object.
+ </para>
+ <sect2>
+ <title>create_parser()</title>
+ <para>
+ This method instantiates a <link linkend="GdaSqlParser">GdaSqlParser</link> object which is
+ adapted to the database's specific SQL dialect. If the provider does not implement its own parser,
+ then this method should not be implemented.
+ </para>
+ </sect2>
+ <sect2>
+ <title>statement_to_sql()</title>
+ <para>
+ This method converts a <link linkend="GdaStatement">GdaStatement</link> object to its SQL representation. It should be
+ implemented only if the default rendering is incorrect (to support some SQL specific dialect). The rendering process
+ is decomposed into several rendering methods, and it is possible to override only some of the methods (see the
+ PostgreSQL's implementation as an example).
+ </para>
+ </sect2>
+ <sect2>
+ <title>statement_prepare()</title>
+ <para>
+ This method requests that a <link linkend="GdaStatement">GdaStatement</link> object be prepared for a future execution.
+ It is called when <link linkend="gda-connection-statement-prepare">gda_connection_statement_prepare()</link> is called.
+ </para>
+ </sect2>
+ <sect2>
+ <title>statement_execute() - mandatory</title>
+ <para>
+ This method actually executes a query represented by a <link linkend="GdaStatement">GdaStatement</link> object. See
+ <link linkend="gda-connection-statement-execute">gda_connection_statement_execute()</link> for more information, note that
+ this method is also always the one called when any of the gda_connection_statement_execute*() methods are called.
+ </para>
+ <para>
+ A non NULL <parameter>exec_cb</parameter> parameter specifies that the user requests an asynchronous execution: the
+ function has to return the NULL value immediately (it must not be blocking), and the <parameter>task_id</parameter>
+ parameter must be set to contain a provider specific task ID.
+ The <parameter>exec_cb</parameter> parameter points to a callback function (specified by the
+ <link linkend="GdaConnection">GdaConnection</link>) which the provider has to call once the statement has been
+ executed, using the same task ID which was defined when the statement_execute() function was called, and
+ the <parameter>cb_data</parameter> specified when the statement_execute() function was called.
+ </para>
+ <para>
+ Note that if an asynchronous execution is requested, then the <parameter>stmt</parameter>, <parameter>params</parameter>,
+ <parameter>col_types</parameter>, <parameter>last_inserted_row</parameter>, and <parameter>cb_data</parameter>
+ parameters are supposed to exist and not be altered during the time the statement is executed (the
+ <link linkend="GdaConnection">GdaConnection</link> ensures this) which means it's not necessary to make copies
+ of them during the execution.
+ </para>
+ </sect2>
+ <sect2>
+ <title>handle_async()</title>
+ <para>
+ This method, if implemented, is called to give the database provider a chance to execute some code in case an
+ asynchronous statement's execution has been requested. Often providers will send some data over the network to the
+ database server when the statement_execute() is called, and implement this virtual function as a way to get
+ some data from the database server to see if the execution is terminated.
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Methods - data representation</title>
+ <para>
+ This group of virtual methods is related to converting some data between the three representations which are the
+ SQL representation (to be directly included in a SQL statement), the human readable representation, and the
+ <link linkend="GValue">GValue</link> representation. For each type of data (identified as a
+ <link linkend="GType">GType</link> type) which the provider can handle, a <link linkend="GdaDataHandler">GdaDataHandler</link>
+ object is responsible of the conversions.
+ </para>
+ <sect2>
+ <title>get_data_handler()</title>
+ <para>
+ This method returns a <link linkend="GdaDataHandler">GdaDataHandler</link> for the requested data type. It should
+ only instantiate each <link linkend="GdaDataHandler">GdaDataHandler</link> once and reuse it if the same request happens
+ (the returned object will not be modified).
+ </para>
+ <para>
+ This method is called by both
+ <link linkend="gda-server-provider-get-data-handler-g-type">gda_server_provider_get_data_handler_g_type()</link> and
+ <link linkend="gda-server-provider-get-data-handler-dbms">gda_server_provider_get_data_handler_dbms()</link> methods.
+ </para>
+ </sect2>
+ <sect2>
+ <title>get_def_dbms_type()</title>
+ <para>
+ This method returns the name of the most common (database specific) data type which has the requested type.
+ </para>
+ </sect2>
+ <sect2>
+ <title>escape_string()</title>
+ <para>
+ This method adds escape characters to a string, to be able to safely add it into an SQL statement.
+ </para>
+ </sect2>
+ <sect2>
+ <title>unescape_string()</title>
+ <para>
+ This method does the reverse of the escape_string() method.
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="prov-metadata">
+ <title>Methods - metadata</title>
+ <para>
+ The <link linkend="GdaServerProviderMeta">GdaServerProviderMeta</link> structure defines all the methods
+ which database providers must implement for the meta data extraction feature to work. Each method is
+ used internally by the <link linkend="GdaConnection">GdaConnection</link> object when one calls the
+ <link linkend="gda-connection-update-meta-store">gda_connection_update_meta_store()</link> method (where the
+ connection object itself computes the list and order of methods to call).
+ Each method must update the contents of one table in the connection's associated metadata
+ (in its associated <link linkend="GdaMetaStore">GdaMetaStore</link> object), each has the same
+ "base" arguments and some have extra arguments further specifying what needs to be updated.
+ </para>
+ <para>
+ For each table to update, there are two methods, which differ in their name only by the fact that one is starting
+ with an underscore '_'. The method starting with an underscore must update the whole contents of the meta data
+ table, and the other one must accept some more parameters to refine what gets updated. There are exception
+ to this rule (such as the
+ "tables_views()" method which must update both the <link linkend="is:_tables">"_tables"</link> and
+ <link linkend="is:_views">"_views"</link> tables, or the for the
+ tables which have no foreign key (no dependency) to any other table).
+ </para>
+ <para>
+ Also, by convetion, the arguments can't be NULL unless the argument name has the "_n" suffix. For example
+ the signature of the "tables_views()" method has the following signature (as defined in the
+ <filename>gda-server-provider.h</filename> file)
+ <programlisting>
+gboolean (*tables_views) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **,
+ const GValue *table_catalog, const GValue *table_schema,
+ const GValue *table_name_n);
+ </programlisting>
+ which means that the <parameter>table_catalog</parameter> and <parameter>table_schema</parameter>
+ arguments can't be NULL, whereas the <parameter>table_name</parameter> can be NULL (and in this case the
+ "tables_views()" method must update the <link linkend="is:_tables">"_tables"</link> and
+ <link linkend="is:_views">"_views"</link> tables regarding all the tables which
+ are in the specified catalog and schema.
+ </para>
+ <para>
+ Make sure you read the information about the meta data's database structure in the
+ <link linkend="information_schema">Database structure</link>, and specifically the
+ <link linkend="information_schema:data_types">data types</link> section and the
+ <link linkend="information_schema:sql_identifiers">SQL identifiers</link> section.
+ </para>
+ <sect2>
+ <title>Important note about SQL identifiers</title>
+ <para>
+ As mentioned in the <link linkend="information_schema:sql_identifiers">SQL identifiers</link> section,
+ any SQL identifier in the meta store is represented either:
+ <itemizedlist>
+ <listitem><para>between double quotes if the SQL identifier is case sensitive</para></listitem>
+ <listitem><para>all in lower case if the SQL identifier is not case sensitive</para></listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ For database engines which internally store case insensitive SQL identifiers in lower case
+ (such as PostgreSQL),
+ the meta data reported by the database engine can be used almost AS IS, but for database
+ engines which internally store case insensitive SQL identifiers in upper case (such as Oracle),
+ the upper case needs to be converted to lower case. Also case sensitive SQL identifiers also need
+ to be double quoted.
+ </para>
+ <para>
+ To minimize the work required to implement a database provider, &LIBGDA; allows the database
+ provider to specifiy how case insensitive SQL identifiers are represented using
+ <link linkend="gda-meta-store-set-identifiers-style">gda_meta_store_set_identifiers_style()</link>
+ and the <link linkend="GdaMetaStore">GdaMetaStore</link> object will perform the work itself (the
+ default being GDA_SQL_IDENTIFIERS_LOWER_CASE in <link linkend="GdaSqlIdentifierStyle">GdaSqlIdentifierStyle</link>.
+ </para>
+ <para>
+ Also note that the extra arguments for each virtual method listed below, when they are present
+ and when they represent an SQL identifier, will be represented:
+ <itemizedlist>
+ <listitem><para>for case insensitive SQL identifiers: using all lower or all upper case (depending on the setting
+ set using <link linkend="gda-meta-store-set-identifiers-style">gda_meta_store_set_identifiers_style()</link>
+ </para></listitem>
+ <listitem><para>for case sensitive SQL identifiers: without the double quotes, but possibily with
+ mixed or not lower and upper characters</para></listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+ <sect2>
+ <title>Reserved SQL keywords</title>
+ <para>
+ Every database engine reserves some keywords for its own usage or because they are part of the SQL
+ language. Reserved keywords can be used as SQL identifiers if they are put between double quotes.
+ </para>
+ <para>
+ As Each database engine has its own set of reserved keywords, the database provider has to tell the
+ <link linkend="GdaMetaStore">GdaMetaStore</link> object what its keywords are, which is done using
+ <link linkend="gda-meta-store-set-reserved-keywords-func">gda_meta_store_set_reserved_keywords_func()</link>
+ and passing a function which determines if a specific string is a reserved keyword. The usage of
+ this function is similar to the usage of the
+ <link linkend="gda-meta-store-set-identifiers-style">gda_meta_store_set_identifiers_style()</link>
+ mentioned above.
+ </para>
+ <para>
+ Writing a function which tests if a string is a reserved keyword is a non complicated but error
+ prone and not optimized, in the same way as writing a parser/lexer directly, so &LIBGDA; has a tool
+ which generates a static hash table from a list of reserved keywords, which is in the
+ <filename>keywords.list</filename> (several keywords can appear on the same line, separated by spaces or commas
+ but the last line must remain empty).
+ </para>
+ </sect2>
+ <sect2>
+ <title>_info()</title>
+ <para>
+ <programlisting>
+gboolean (*_info) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **);
+ </programlisting>
+ This method must update the contents of the
+ <link linkend="is:_information_schema_catalog_name">"_information_schema_catalog_name"</link>
+ table, which must contain exactly
+ one row describing the catalog name for the connection.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>_btypes()</title>
+ <para>
+ <programlisting>
+gboolean (*_btypes) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **);
+ </programlisting>
+ This method must update the contents of the <link linkend="is:_builtin_data_types">"_builtin_data_types"</link>
+ table which lists all the
+ database's built in data types. There is no specific parameter.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>schemata() and _schemata()</title>
+ <para>
+ <programlisting>
+gboolean (*_schemata) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **);
+gboolean (*schemata) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **,
+ const GValue *catalog_name, const GValue *schema_name_n);
+ </programlisting>
+ This method must update the contents of the <link linkend="is:_schemata">"_schemata"</link> table,
+ which lists all the schemas (namespaces).
+ </para>
+ </sect2>
+ <sect2>
+ <title>tables_views() and _tables_views()</title>
+ <para>
+ <programlisting>
+gboolean (*_tables_views) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **);
+gboolean (*tables_views) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **,
+ const GValue *table_catalog, const GValue *table_schema,
+ const GValue *table_name_n);
+ </programlisting>
+ This method must update the contents of the <link linkend="is:_tables">"_tables"</link> and
+ <link linkend="is:_views">"_views"</link> tables which list all the
+ tables and views.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>columns() and _columns()</title>
+ <para>
+ <programlisting>
+gboolean (*_columns) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **);
+gboolean (*columns) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **,
+ const GValue *table_catalog, const GValue *table_schema,
+ const GValue *table_name);
+ </programlisting>
+ This method must update the contents of the <link linkend="is:_columns">"_columns"</link> table which lists all the
+ columns of all the tables and views.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>constraints_tab() and _constraints_tab()</title>
+ <para>
+ <programlisting>
+gboolean (*_constraints_tab) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **);
+gboolean (*constraints_tab) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **,
+ const GValue *table_catalog, const GValue *table_schema,
+ const GValue *table_name, const GValue *constraint_name_n);
+ </programlisting>
+ This method must update the contents of the <link linkend="is:_table_constraints">"_table_constraints"</link>
+ table which lists all the
+ constraints (primary key, foreign key, unique or check constraints) for each table.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>constraints_ref() and _constraints_ref()</title>
+ <para>
+ <programlisting>
+gboolean (*_constraints_ref) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **);
+gboolean (*constraints_ref) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **,
+ const GValue *table_catalog, const GValue *table_schema,
+ const GValue *table_name, const GValue *constraint_name);
+ </programlisting>
+ This method must update the contents of the
+ <link linkend="is:_referential_constraints">"_referential_constraints"</link> table which lists all the
+ referential constraints (which are also listed in the
+ <link linkend="is:_table_constraints">"_table_constraints"</link> table).
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>key_columns() and _key_columns()</title>
+ <para>
+ <programlisting>
+gboolean (*_key_columns) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **);
+gboolean (*key_columns) (GdaServerProvider *, GdaConnection *, GdaMetaStore *,
+ GdaMetaContext *, GError **,
+ const GValue *table_catalog, const GValue *table_schema,
+ const GValue *table_name, const GValue *constraint_name);
+ </programlisting>
+ This method must update the contents of the <link linkend="is:_key_column_usage">"_key_column_usage"</link>
+ table which lists all the
+ columns involved in each table constraint (as listed in the
+ <link linkend="is:_table_constraints">"_table_constraints"</link> table).
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Methods - misc.</title>
+ <sect2>
+ <title>cancel()</title>
+ <para>
+ This method cancels an asynchronous task.
+ </para>
+ </sect2>
+ <sect2>
+ <title>create_connection()</title>
+ <para>
+ Reserved for internal implementation.
+ </para>
+ </sect2>
+ <sect2>
+ <title>is_busy()</title>
+ <para>
+ This method tests if a connection is already busy in a, asynchronous task.
+ </para>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/doc/C/server-operation.xml b/doc/C/server-operation.xml
index 2524d0e..b076491 100644
--- a/doc/C/server-operation.xml
+++ b/doc/C/server-operation.xml
@@ -1,3 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
<sect2 id="DDLIntro">
<title>General words about DDL queries</title>
<para>
diff --git a/doc/C/virtual.xml b/doc/C/virtual.xml
index 551a690..6dfc036 100644
--- a/doc/C/virtual.xml
+++ b/doc/C/virtual.xml
@@ -1,4 +1,9 @@
-<sect2 id="VirtualIntro">
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"[
+<!ENTITY LIBGDA "<application>Libgda</application>">
+]>
+<sect2 id="VirtualIntro" xmlns:xi="http://www.w3.org/2003/XInclude">
<title>Introduction to virtual connections</title>
<para>
&LIBGDA; implements so called virtual connections which are used like normal
@@ -36,5 +41,5 @@ cnc = gda_virtual_connection_open (provider, NULL);
<listitem><para><filename class="directory">testing/virtual-test-2.c</filename></para></listitem>
</itemizedlist>
</para>
- &libgda-virtual-notice;
+<xi:include href="virtual-notice.xml"/>
</sect2>
diff --git a/libgda-report/engine/rt-parser.c b/libgda-report/engine/rt-parser.c
index 317ccdf..0553124 100644
--- a/libgda-report/engine/rt-parser.c
+++ b/libgda-report/engine/rt-parser.c
@@ -1,6 +1,6 @@
/* rt-parser.c
*
- * Copyright (C) 2010 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2010 - 2011 Vivien Malerba <malerba gnome-db org>
*
* This Library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License as
@@ -97,7 +97,7 @@ static MarkupTag get_markup_token (const gchar *alltext, const gchar *start, gin
static MarkupTag get_token (const gchar *alltext, const gchar *start, gint *out_nb_spaces_before, const gchar **out_end,
MarkupTag start_tag);
-/**
+/*
* get_token
*
* returns the token type starting from @iter, and positions @out_end to the last used position
@@ -344,7 +344,7 @@ get_markup_token (const gchar *alltext, const gchar *start, gint *out_nb_spaces_
return MARKUP_NONE;
}
-/**
+/*
* steals @base64
*/
static gchar *
diff --git a/libgda-ui/gdaui-rt-editor.c b/libgda-ui/gdaui-rt-editor.c
index 44042a0..e8122c1 100644
--- a/libgda-ui/gdaui-rt-editor.c
+++ b/libgda-ui/gdaui-rt-editor.c
@@ -1138,11 +1138,13 @@ text_buffer_changed_cb (GtkTextBuffer *textbuffer, GdauiRtEditor *rte)
g_signal_emit (rte, gdaui_rt_editor_signals[CHANGED], 0, NULL);
}
-/**
+/*
* get_token
*
* returns the token type starting from @iter, and positions @out_end to the last used position
* position.
+ *
+ * Returns: a #MarkupTag
*/
static MarkupTag
get_token (GtkTextIter *iter, gint *out_nb_spaces_before, GtkTextIter *out_end,
@@ -1577,7 +1579,7 @@ serialize_tag (GtkTextTag *tag, gboolean starting, GdauiRtEditor *editor)
}
}
-/**
+/*
* steals @base64
*/
static gchar *
@@ -1596,7 +1598,7 @@ add_newlines_to_base64 (gchar *base64)
return g_string_free (string, FALSE);
}
-/**
+/*
* steals @base64
*/
static gchar *
diff --git a/libgda-ui/internal/gdaui-provider-spec-editor.c b/libgda-ui/internal/gdaui-provider-spec-editor.c
index 2aef203..375c02d 100644
--- a/libgda-ui/internal/gdaui-provider-spec-editor.c
+++ b/libgda-ui/internal/gdaui-provider-spec-editor.c
@@ -1,5 +1,5 @@
/* GNOME DB library
- * Copyright (C) 2005 - 2009 The GNOME Foundation
+ * Copyright (C) 2005 - 2011 The GNOME Foundation
*
* AUTHORS:
* Vivien Malerba <malerba gnome-db org>
@@ -346,7 +346,7 @@ _gdaui_provider_spec_editor_get_type (void)
return type;
}
-/**
+/*
* _gdaui_provider_spec_editor_new
* @provider: the provider to be used
*
diff --git a/libgda-ui/internal/utility.c b/libgda-ui/internal/utility.c
index 290db14..e5face5 100644
--- a/libgda-ui/internal/utility.c
+++ b/libgda-ui/internal/utility.c
@@ -1,6 +1,6 @@
/* utility.c
*
- * Copyright (C) 2003 - 2010 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2003 - 2011 Vivien Malerba <malerba gnome-db org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -28,7 +28,7 @@
#include <libgda-ui/gdaui-decl.h>
-/**
+/*
* _gdaui_utility_entry_build_actions_menu
* @obj_data:
* @attrs:
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index de79439..a1951b6 100755
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -1,4 +1,4 @@
-doc/C/prov-writing.xml
+doc/C/prov-writing-assembly.xml
libgda/sqlite/sql-parser.c/lemon.c
libgda/sqlite/sql-parser.c/lempar.c
libgda/sqlite/sqlite-src/sqlite3.c
diff --git a/tools/browser/doc/gda-browser-docs.sgml b/tools/browser/doc/gda-browser-docs.sgml
index d969a87..de7cb6d 100644
--- a/tools/browser/doc/gda-browser-docs.sgml
+++ b/tools/browser/doc/gda-browser-docs.sgml
@@ -1,27 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-<!ENTITY nbsp " ">
-<!ENTITY LIBGDA "<application>Libgda</application>">
-<!ENTITY GNOMEDB "<application>GNOME-DB</application>">
-<!ENTITY fdl-appendix SYSTEM "fdl-appendix.sgml">
-<!ENTITY BrowserCore SYSTEM "xml/browser-core.xml">
-<!ENTITY BrowserWindow SYSTEM "xml/browser-window.xml">
-<!ENTITY BrowserConnection SYSTEM "xml/browser-connection.xml">
-<!ENTITY BrowserFavorites SYSTEM "xml/browser-favorites.xml">
-<!ENTITY BrowserPage SYSTEM "xml/browser-page.xml">
-<!ENTITY BrowserPerspective SYSTEM "xml/browser-perspective.xml">
-<!ENTITY DataManagerPerspective SYSTEM "xml/data-manager-perspective.xml">
-<!ENTITY SchemaBrowserPerspective SYSTEM "xml/schema-browser-perspective.xml">
-<!ENTITY QueryExecPerspective SYSTEM "xml/query-exec-perspective.xml">
-<!ENTITY CCGrayBar SYSTEM "xml/cc-gray-bar.xml">
-<!ENTITY PopupContainer SYSTEM "xml/popup-container.xml">
-<!ENTITY UIFomrGrid SYSTEM "xml/ui-formgrid.xml">
-<!ENTITY MgrFavorites SYSTEM "xml/mgr-favorites.xml">
-<!ENTITY Support SYSTEM "xml/support.xml">
-]>
-
-<book id="index">
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
<bookinfo>
<title>GdaBrowser hacking manual</title>
<authorgroup>
@@ -35,7 +15,7 @@
</contrib>
</author>
</authorgroup>
- <date>Jan. 2011</date>
+ <date>Feb. 2011</date>
<copyright>
<year>2009 - 2011</year>
<holder>The GNOME Foundation</holder>
@@ -126,10 +106,10 @@
This section is a reference to all the core objects of the Gda browser,
which can be used in any extension.
</para>
- &BrowserCore;
- &BrowserConnection;
- &BrowserFavorites;
- &Support;
+ <xi:include href="xml/browser-core.xml"/>
+ <xi:include href="xml/browser-connection.xml"/>
+ <xi:include href="xml/browser-favorites.xml"/>
+ <xi:include href="xml/support.xml"/>
</chapter>
<chapter id="windows">
@@ -150,9 +130,9 @@
</textobject>
</mediaobject>
</para>
- &BrowserWindow;
- &BrowserPerspective;
- &BrowserPage;
+ <xi:include href="xml/browser-window.xml"/>
+ <xi:include href="xml/browser-perspective.xml"/>
+ <xi:include href="xml/browser-page.xml"/>
</chapter>
<chapter id="extrawidgets">
@@ -161,9 +141,9 @@
This section is a reference to all the extra widgets used in the Gda browser,
which can be used in any extension.
</para>
- &UIFomrGrid;
- &CCGrayBar;
- &PopupContainer;
+ <xi:include href="xml/ui-formgrid.xml"/>
+ <xi:include href="xml/cc-gray-bar.xml"/>
+ <xi:include href="xml/popup-container.xml"/>
</chapter>
<chapter id="perspectives">
@@ -172,16 +152,16 @@
This section is a reference to some of the existing perspectives and the associated
widgets.
</para>
- &MgrFavorites;
- &SchemaBrowserPerspective;
- &DataManagerPerspective;
- &QueryExecPerspective;
+ <xi:include href="xml/mgr-favorites.xml"/>
+ <xi:include href="xml/schema-browser-perspective.xml"/>
+ <xi:include href="xml/data-manager-perspective.xml"/>
+ <xi:include href="xml/query-exec-perspective.xml"/>
</chapter>
</part>
<part id="part_index">
<title>Appendix</title>
- &fdl-appendix;
+ <xi:include href="fdl-appendix.xml"/>
</part>
</book>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]