{
    "content": [
        {
            "type": "text",
            "text": "# DBD::File::Developers (perldoc)\n\n## NAME\n\nDBD::File::Developers - Developers documentation for DBD::File\n\n## SYNOPSIS\n\npackage DBD::myDriver;\nuse base qw( DBD::File );\nsub driver\n{\n...\nmy $drh = $proto->SUPER::driver ($attr);\n...\nreturn $drh->{class};\n}\nsub CLONE { ... }\npackage DBD::myDriver::dr;\n@ISA = qw( DBD::File::dr );\nsub datasources { ... }\n...\npackage DBD::myDriver::db;\n@ISA = qw( DBD::File::db );\nsub initvalidattributes { ... }\nsub initdefaultattributes { ... }\nsub setversions { ... }\nsub validateSTOREattr { my ($dbh, $attrib, $value) = @; ... }\nsub validateFETCHattr { my ($dbh, $attrib) = @; ... }\nsub getmydversions { ... }\npackage DBD::myDriver::st;\n@ISA = qw( DBD::File::st );\nsub FETCH { ... }\nsub STORE { ... }\npackage DBD::myDriver::Statement;\n@ISA = qw( DBD::File::Statement );\npackage DBD::myDriver::Table;\n@ISA = qw( DBD::File::Table );\nmy %resetonmodify = (\nmydabc => \"mydfoo\",\nmydmno => \"mydbar\",\n);\nPACKAGE->registerresetonmodify (\\%resetonmodify);\nmy %compatmap = (\nabc => 'fooabc',\nxyz => 'fooxyz',\n);\nPACKAGE->registercompatmap (\\%compatmap);\nsub bootstraptablemeta { ... }\nsub inittablemeta { ... }\nsub tablemetaattrchanged { ... }\nsub opendata { ... }\nsub fetchrow { ... }\nsub pushrow { ... }\nsub pushnames { ... }\n# optimize the SQL engine by add one or more of\nsub updatecurrentrow { ... }\n# or\nsub updatespecificrow { ... }\n# or\nsub updateonerow { ... }\n# or\nsub insertnewrow { ... }\n# or\nsub deletecurrentrow { ... }\n# or\nsub deleteonerow { ... }\n\n## DESCRIPTION\n\nThis document describes how DBD developers can write DBD::File based DBI drivers. It supplements\nDBI::DBD and DBI::DBD::SqlEngine::Developers, which you should read first.\n\n## Sections\n\n- **NAME**\n- **SYNOPSIS**\n- **DESCRIPTION**\n- **CLASSES**\n- **AUTHOR**\n- **COPYRIGHT AND LICENSE**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "DBD::File::Developers",
        "section": "",
        "mode": "perldoc",
        "summary": "DBD::File::Developers - Developers documentation for DBD::File",
        "synopsis": "package DBD::myDriver;\nuse base qw( DBD::File );\nsub driver\n{\n...\nmy $drh = $proto->SUPER::driver ($attr);\n...\nreturn $drh->{class};\n}\nsub CLONE { ... }\npackage DBD::myDriver::dr;\n@ISA = qw( DBD::File::dr );\nsub datasources { ... }\n...\npackage DBD::myDriver::db;\n@ISA = qw( DBD::File::db );\nsub initvalidattributes { ... }\nsub initdefaultattributes { ... }\nsub setversions { ... }\nsub validateSTOREattr { my ($dbh, $attrib, $value) = @; ... }\nsub validateFETCHattr { my ($dbh, $attrib) = @; ... }\nsub getmydversions { ... }\npackage DBD::myDriver::st;\n@ISA = qw( DBD::File::st );\nsub FETCH { ... }\nsub STORE { ... }\npackage DBD::myDriver::Statement;\n@ISA = qw( DBD::File::Statement );\npackage DBD::myDriver::Table;\n@ISA = qw( DBD::File::Table );\nmy %resetonmodify = (\nmydabc => \"mydfoo\",\nmydmno => \"mydbar\",\n);\nPACKAGE->registerresetonmodify (\\%resetonmodify);\nmy %compatmap = (\nabc => 'fooabc',\nxyz => 'fooxyz',\n);\nPACKAGE->registercompatmap (\\%compatmap);\nsub bootstraptablemeta { ... }\nsub inittablemeta { ... }\nsub tablemetaattrchanged { ... }\nsub opendata { ... }\nsub fetchrow { ... }\nsub pushrow { ... }\nsub pushnames { ... }\n# optimize the SQL engine by add one or more of\nsub updatecurrentrow { ... }\n# or\nsub updatespecificrow { ... }\n# or\nsub updateonerow { ... }\n# or\nsub insertnewrow { ... }\n# or\nsub deletecurrentrow { ... }\n# or\nsub deleteonerow { ... }",
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [],
        "examples": [],
        "see_also": [],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "SYNOPSIS",
                "lines": 80,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "CLASSES",
                "lines": 446,
                "subsections": []
            },
            {
                "name": "AUTHOR",
                "lines": 6,
                "subsections": []
            },
            {
                "name": "COPYRIGHT AND LICENSE",
                "lines": 7,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "DBD::File::Developers - Developers documentation for DBD::File\n",
                "subsections": []
            },
            "SYNOPSIS": {
                "content": "package DBD::myDriver;\n\nuse base qw( DBD::File );\n\nsub driver\n{\n...\nmy $drh = $proto->SUPER::driver ($attr);\n...\nreturn $drh->{class};\n}\n\nsub CLONE { ... }\n\npackage DBD::myDriver::dr;\n\n@ISA = qw( DBD::File::dr );\n\nsub datasources { ... }\n...\n\npackage DBD::myDriver::db;\n\n@ISA = qw( DBD::File::db );\n\nsub initvalidattributes { ... }\nsub initdefaultattributes { ... }\nsub setversions { ... }\nsub validateSTOREattr { my ($dbh, $attrib, $value) = @; ... }\nsub validateFETCHattr { my ($dbh, $attrib) = @; ... }\nsub getmydversions { ... }\n\npackage DBD::myDriver::st;\n\n@ISA = qw( DBD::File::st );\n\nsub FETCH { ... }\nsub STORE { ... }\n\npackage DBD::myDriver::Statement;\n\n@ISA = qw( DBD::File::Statement );\n\npackage DBD::myDriver::Table;\n\n@ISA = qw( DBD::File::Table );\n\nmy %resetonmodify = (\nmydabc => \"mydfoo\",\nmydmno => \"mydbar\",\n);\nPACKAGE->registerresetonmodify (\\%resetonmodify);\nmy %compatmap = (\nabc => 'fooabc',\nxyz => 'fooxyz',\n);\nPACKAGE->registercompatmap (\\%compatmap);\n\nsub bootstraptablemeta { ... }\nsub inittablemeta { ... }\nsub tablemetaattrchanged { ... }\nsub opendata { ... }\n\nsub fetchrow { ... }\nsub pushrow { ... }\nsub pushnames { ... }\n\n# optimize the SQL engine by add one or more of\nsub updatecurrentrow { ... }\n# or\nsub updatespecificrow { ... }\n# or\nsub updateonerow { ... }\n# or\nsub insertnewrow { ... }\n# or\nsub deletecurrentrow { ... }\n# or\nsub deleteonerow { ... }\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "This document describes how DBD developers can write DBD::File based DBI drivers. It supplements\nDBI::DBD and DBI::DBD::SqlEngine::Developers, which you should read first.\n",
                "subsections": []
            },
            "CLASSES": {
                "content": "Each DBI driver must provide a package global \"driver\" method and three DBI related classes:\n\nDBD::File::dr\nDriver package, contains the methods DBI calls indirectly via DBI interface:\n\nDBI->connect ('DBI:DBM:', undef, undef, {})\n\n# invokes\npackage DBD::DBM::dr;\n@DBD::DBM::dr::ISA = qw( DBD::File::dr );\n\nsub connect ($$;$$$)\n{\n...\n}\n\nSimilar for \"datasources\" and \"disconnectall\".\n\nPure Perl DBI drivers derived from DBD::File do not usually need to override any of the\nmethods provided through the DBD::XXX::dr package however if you need additional\ninitialization in the connect method you may need to.\n\nDBD::File::db\nContains the methods which are called through DBI database handles ($dbh). e.g.,\n\n$sth = $dbh->prepare (\"select * from foo\");\n# returns the fencoding setting for table foo\n$dbh->csvgetmeta (\"foo\", \"fencoding\");\n\nDBD::File provides the typical methods required here. Developers who write DBI drivers based\non DBD::File need to override the methods \"setversions\" and \"initvalidattributes\".\n\nDBD::File::st\nContains the methods to deal with prepared statement handles. e.g.,\n\n$sth->execute () or die $sth->errstr;\n\nDBD::File\nThis is the main package containing the routines to initialize DBD::File based DBI drivers.\nPrimarily the \"DBD::File::driver\" method is invoked, either directly from DBI when the driver is\ninitialized or from the derived class.\n\npackage DBD::DBM;\n\nuse base qw( DBD::File );\n\nsub driver\n{\nmy ($class, $attr) = @;\n...\nmy $drh = $class->SUPER::driver ($attr);\n...\nreturn $drh;\n}\n\nIt is not necessary to implement your own driver method as long as additional initialization\n(e.g. installing more private driver methods) is not required. You do not need to call\n\"setupdriver\" as DBD::File takes care of it.\n\nDBD::File::dr\nThe driver package contains the methods DBI calls indirectly via the DBI interface (see \"DBI\nClass Methods\" in DBI).\n\nDBD::File based DBI drivers usually do not need to implement anything here, it is enough to do\nthe basic initialization:\n\npackage DBD:XXX::dr;\n\n@DBD::XXX::dr::ISA = qw (DBD::File::dr);\n$DBD::XXX::dr::impdatasize     = 0;\n$DBD::XXX::dr::datasourcesattr = undef;\n$DBD::XXX::ATTRIBUTION = \"DBD::XXX $DBD::XXX::VERSION by Hans Mustermann\";\n\nDBD::File::db\nThis package defines the database methods, which are called via the DBI database handle $dbh.\n\nMethods provided by DBD::File:\n\nping\nSimply returns the content of the \"Active\" attribute. Override when your driver needs more\ncomplicated actions here.\n\nprepare\nPrepares a new SQL statement to execute. Returns a statement handle, $sth - instance of the\nDBD:XXX::st. It is neither required nor recommended to override this method.\n\nFETCH\nFetches an attribute of a DBI database object. Private handle attributes must have a prefix\n(this is mandatory). If a requested attribute is detected as a private attribute without a\nvalid prefix, the driver prefix (written as $drvprefix) is added.\n\nThe driver prefix is extracted from the attribute name and verified against\n\"$dbh->{$drvprefix . \"validattrs\"}\" (when it exists). If the requested attribute value is\nnot listed as a valid attribute, this method croaks. If the attribute is valid and readonly\n(listed in \"$dbh->{ $drvprefix . \"readonlyattrs\" }\" when it exists), a real copy of the\nattribute value is returned. So it's not possible to modify \"fvalidattrs\" from outside of\nDBD::File::db or a derived class.\n\nSTORE\nStores a database private attribute. Private handle attributes must have a prefix (this is\nmandatory). If a requested attribute is detected as a private attribute without a valid\nprefix, the driver prefix (written as $drvprefix) is added. If the database handle has an\nattribute \"${drvprefix}validattrs\" - for attribute names which are not listed in that\nhash, this method croaks. If the database handle has an attribute\n\"${drvprefix}readonlyattrs\", only attributes which are not listed there can be stored\n(once they are initialized). Trying to overwrite such an immutable attribute forces this\nmethod to croak.\n\nAn example of a valid attributes list can be found in\n\"DBD::File::db::initvalidattributes\".\n\nsetversions\nThis method sets the attribute \"fversion\" with the version of DBD::File.\n\nThis method is called at the begin of the \"connect ()\" phase.\n\nWhen overriding this method, do not forget to invoke the superior one.\n\ninitvalidattributes\nThis method is called after the database handle is instantiated as the first attribute\ninitialization.\n\n\"DBD::File::db::initvalidattributes\" initializes the attributes \"fvalidattrs\" and\n\"freadonlyattrs\".\n\nWhen overriding this method, do not forget to invoke the superior one, preferably before\ndoing anything else. Compatibility table attribute access must be initialized here to allow\nDBD::File to instantiate the map tie:\n\n# for DBD::CSV\n$dbh->{csvmeta} = \"csvtables\";\n# for DBD::DBM\n$dbh->{dbmmeta} = \"dbmtables\";\n# for DBD::AnyData\n$dbh->{admeta}  = \"adtables\";\n\ninitdefaultattributes\nThis method is called after the database handle is instantiated to initialize the default\nattributes.\n\n\"DBD::File::db::initdefaultattributes\" initializes the attributes \"fdir\", \"fmeta\",\n\"fmetamap\", \"fversion\".\n\nWhen the derived implementor class provides the attribute to validate attributes (e.g.\n\"$dbh->{dbmvalidattrs} = {...};\") or the attribute containing the immutable attributes\n(e.g. \"$dbh->{dbmreadonlyattrs} = {...};\"), the attributes \"drvvalidattrs\",\n\"drvreadonlyattrs\", \"drvversion\" and \"drvmeta\" are added (when available) to the list of\nvalid and immutable attributes (where \"drv\" is interpreted as the driver prefix).\n\nIf \"drvmeta\" is set, an attribute with the name in \"drvmeta\" is initialized providing\nrestricted read/write access to the meta data of the tables using \"DBD::File::TieTables\" in\nthe first (table) level and \"DBD::File::TieMeta\" for the meta attribute level.\n\"DBD::File::TieTables\" uses \"DBD::DRV::Table::gettablemeta\" to initialize the second level\ntied hash on FETCH/STORE. The \"DBD::File::TieMeta\" class uses\n\"DBD::DRV::Table::gettablemetaattr\" to FETCH attribute values and\n\"DBD::DRV::Table::settablemetaattr\" to STORE attribute values. This allows it to map meta\nattributes for compatibility reasons.\n\ngetsingletablemeta\ngetfilemeta\nRetrieve an attribute from a table's meta information. The method signature is\n\"getfilemeta ($dbh, $table, $attr)\". This method is called by the injected db handle\nmethod \"${drvprefix}getmeta\".\n\nWhile getfilemeta allows $table or $attr to be a list of tables or attributes to retrieve,\ngetsingletablemeta allows only one table name and only one attribute name. A table name\nof '.' (single dot) is interpreted as the default table and this will retrieve the\nappropriate attribute globally from the dbh. This has the same restrictions as\n\"$dbh->{$attrib}\".\n\ngetfilemeta allows '+' and '*' as wildcards for table names and $table being a regular\nexpression matching against the table names (evaluated without the default table). The table\nname '*' is *all currently known tables, including the default one*. The table name '+' is\n*all table names which conform to ANSI file name restrictions* (/^[A-Za-z0-9]+$/).\n\nThe table meta information is retrieved using the gettablemeta and gettablemetaattr\nmethods of the table class of the implementation.\n\nsetsingletablemeta\nsetfilemeta\nSets an attribute in a table's meta information. The method signature is \"setfilemeta\n($dbh, $table, $attr, $value)\". This method is called by the injected db handle method\n\"${drvprefix}setmeta\".\n\nWhile setfilemeta allows $table to be a list of tables and $attr to be a hash of several\nattributes to set, setsingletablemeta allows only one table name and only one attribute\nname/value pair.\n\nThe wildcard characters for the table name are the same as for getfilemeta.\n\nThe table meta information is updated using the gettablemeta and settablemetaattr\nmethods of the table class of the implementation.\n\nclearfilemeta\nClears all meta information cached about a table. The method signature is \"clearfilemeta\n($dbh, $table)\". This method is called by the injected db handle method\n\"${drvprefix}clearmeta\".\n\nDBD::File::st\nContains the methods to deal with prepared statement handles:\n\nFETCH\nFetches statement handle attributes. Supported attributes (for full overview see \"Statement\nHandle Attributes\" in DBI) are \"NAME\", \"TYPE\", \"PRECISION\" and \"NULLABLE\" in case that\nSQL::Statement is used as SQL execution engine and a statement is successful prepared. When\nSQL::Statement has additional information about a table, those information are returned.\nOtherwise, the same defaults as in DBI::DBD::SqlEngine are used.\n\nThis method usually requires extending in a derived implementation. See DBD::CSV or DBD::DBM\nfor some example.\n\nDBD::File::TableSource::FileSystem\nProvides data sources and table information on database driver and database handle level.\n\npackage DBD::File::TableSource::FileSystem;\n\nsub datasources ($;$)\n{\nmy ($class, $drh, $attrs) = @;\n...\n}\n\nsub availtables\n{\nmy ($class, $drh) = @;\n...\n}\n\nThe \"datasources\" method is called when the user invokes any of the following:\n\n@ary = DBI->datasources ($driver);\n@ary = DBI->datasources ($driver, \\%attr);\n\n@ary = $dbh->datasources ();\n@ary = $dbh->datasources (\\%attr);\n\nThe \"availtables\" method is called when the user invokes any of the following:\n\n@names = $dbh->tables ($catalog, $schema, $table, $type);\n\n$sth   = $dbh->tableinfo ($catalog, $schema, $table, $type);\n$sth   = $dbh->tableinfo ($catalog, $schema, $table, $type, \\%attr);\n\n$dbh->func (\"listtables\");\n\nEvery time where an \"\\%attr\" argument can be specified, this \"\\%attr\" object's\n\"sqltablesource\" attribute is preferred over the $dbh attribute or the driver default.\n\nDBD::File::DataSource::Stream\npackage DBD::File::DataSource::Stream;\n\n@DBD::File::DataSource::Stream::ISA = 'DBI::DBD::SqlEngine::DataSource';\n\nsub completetablename\n{\nmy ($self, $meta, $file, $respectcase) = @;\n...\n}\n\nClears all meta attributes identifying a file: \"ffqfn\", \"ffqbn\" and \"ffqln\". The table name\nis set according to $respectcase and \"$meta->{sqlidentifiercase}\" (SQLICLOWER,\nSQLICUPPER).\n\npackage DBD::File::DataSource::Stream;\n\nsub applyencoding\n{\nmy ($self, $meta, $fn) = @;\n...\n}\n\nApplies the encoding from *meta information* (\"$meta->{fencoding}\") to the file handled opened\nin \"opendata\".\n\npackage DBD::File::DataSource::Stream;\n\nsub opendata\n{\nmy ($self, $meta, $attrs, $flags) = @;\n...\n}\n\nOpens (\"dup (2)\") the file handle provided in \"$meta->{ffile}\".\n\npackage DBD::File::DataSource::Stream;\n\nsub canflock { ... }\n\nReturns whether \"flock (2)\" is available or not (avoids retesting in subclasses).\n\nDBD::File::DataSource::File\npackage DBD::File::DataSource::File;\n\nsub completetablename ($$;$)\n{\nmy ($self, $meta, $table, $respectcase) = @;\n...\n}\n\nThe method \"completetablename\" tries to map a filename to the associated table name. It is\ncalled with a partially filled meta structure for the resulting table containing at least the\nfollowing attributes: \"fext\", \"fdir\", \"flockfile\" and \"sqlidentifiercase\".\n\nIf a file/table map can be found then this method sets the \"ffqfn\", \"ffqbn\", \"ffqln\" and\n\"tablename\" attributes in the meta structure. If a map cannot be found the table name will be\nundef.\n\npackage DBD::File::DataSource::File;\n\nsub opendata ($)\n{\nmy ($self, $meta, $attrs, $flags) = @;\n...\n}\n\nDepending on the attributes set in the table's meta data, the following steps are performed.\nUnless \"fdontopen\" is set to a true value, \"ffqfn\" must contain the full qualified file name\nfor the table to work on (file2table ensures this). The encoding in \"fencoding\" is applied if\nset and the file is opened. If \"<ffqln \"> (full qualified lock name) is set, this file is\nopened, too. Depending on the value in \"flock\", the appropriate lock is set on the opened data\nfile or lock file.\n\nDBD::File::Statement\nDerives from DBI::SQL::Nano::Statement to provide following method:\n\nopentable\nImplements the opentable method required by SQL::Statement and DBI::SQL::Nano. All the work\nfor opening the file(s) belonging to the table is handled and parametrized in\nDBD::File::Table. Unless you intend to add anything to the following implementation, an\nempty DBD::XXX::Statement package satisfies DBD::File.\n\nsub opentable ($$$$$)\n{\nmy ($self, $data, $table, $createMode, $lockMode) = @;\n\nmy $class = ref $self;\n$class =~ s/::Statement/::Table/;\n\nmy $flags = {\ncreateMode => $createMode,\nlockMode   => $lockMode,\n};\n$self->{command} eq \"DROP\" and $flags->{dropMode} = 1;\n\nreturn $class->new ($data, { table => $table }, $flags);\n} # opentable\n\nDBD::File::Table\nDerives from DBI::SQL::Nano::Table and provides physical file access for the table data which\nare stored in the files.\n\nbootstraptablemeta\nInitializes a table meta structure. Can be safely overridden in a derived class, as long as\nthe \"SUPER\" method is called at the end of the overridden method.\n\nIt copies the following attributes from the database into the table meta data \"fdir\",\n\"fext\", \"fencoding\", \"flock\", \"fschema\" and \"flockfile\" and makes them sticky to the\ntable.\n\nThis method should be called before you attempt to map between file name and table name to\nensure the correct directory, extension etc. are used.\n\ninittablemeta\nInitializes more attributes of the table meta data - usually more expensive ones (e.g. those\nwhich require class instantiations) - when the file name and the table name could mapped.\n\ngettablemeta\nReturns the table meta data. If there are none for the required table, a new one is\ninitialized. When it fails, nothing is returned. On success, the name of the table and the\nmeta data structure is returned.\n\ngettablemetaattr\nReturns a single attribute from the table meta data. If the attribute name appears in\n%compatmap, the attribute name is updated from there.\n\nsettablemetaattr\nSets a single attribute in the table meta data. If the attribute name appears in\n%compatmap, the attribute name is updated from there.\n\ntablemetaattrchanged\nCalled when an attribute of the meta data is modified.\n\nIf the modified attribute requires to reset a calculated attribute, the calculated attribute\nis reset (deleted from meta data structure) and the *initialized* flag is removed, too. The\ndecision is made based on %registerresetonmodify.\n\nregisterresetonmodify\nAllows \"settablemetaattr\" to reset meta attributes when special attributes are modified.\nFor DBD::File, modifying one of \"ffile\", \"fdir\", \"fext\" or \"flockfile\" will reset\n\"ffqfn\". DBD::DBM extends the list for \"dbmtype\" and \"dbmmldbm\" to reset the value of\n\"dbmtietype\".\n\nIf your DBD has calculated values in the meta data area, then call\n\"registerresetonmodify\":\n\nmy %resetonmodify = (xxxfoo => \"xxxbar\");\nPACKAGE->registerresetonmodify (\\%resetonmodify);\n\nregistercompatmap\nAllows \"gettablemetaattr\" and \"settablemetaattr\" to update the attribute name to the\ncurrent favored one:\n\n# from DBD::DBM\nmy %compatmap = (dbmext => \"fext\");\nPACKAGE->registercompatmap (\\%compatmap);\n\nopenfile\nCalled to open the table's data file.\n\nDepending on the attributes set in the table's meta data, the following steps are performed.\nUnless \"fdontopen\" is set to a true value, \"ffqfn\" must contain the full qualified file\nname for the table to work on (file2table ensures this). The encoding in \"fencoding\" is\napplied if set and the file is opened. If \"<ffqln \"> (full qualified lock name) is set,\nthis file is opened, too. Depending on the value in \"flock\", the appropriate lock is set on\nthe opened data file or lock file.\n\nAfter this is done, a derived class might add more steps in an overridden \"openfile\"\nmethod.\n\nnew Instantiates the table. This is done in 3 steps:\n\n1. get the table meta data\n2. open the data file\n3. bless the table data structure using inherited constructor new\n\nIt is not recommended to override the constructor of the table class. Find a reasonable\nplace to add you extensions in one of the above four methods.\n\ndrop\nImplements the abstract table method for the \"DROP\" command. Discards table meta data after\nall files belonging to the table are closed and unlinked.\n\nOverriding this method might be reasonable in very rare cases.\n\nseek\nImplements the abstract table method used when accessing the table from the engine. \"seek\"\nis called every time the engine uses dumb algorithms for iterating over the table content.\n\ntruncate\nImplements the abstract table method used when dumb table algorithms for \"UPDATE\" or\n\"DELETE\" need to truncate the table storage after the last written row.\n\nYou should consult the documentation of \"SQL::Eval::Table\" (see SQL::Eval) to get more\ninformation about the abstract methods of the table's base class you have to override and a\ndescription of the table meta information expected by the SQL engines.\n",
                "subsections": []
            },
            "AUTHOR": {
                "content": "The module DBD::File is currently maintained by\n\nH.Merijn Brand < h.m.brand at xs4all.nl > and Jens Rehsack < rehsack at googlemail.com >\n\nThe original author is Jochen Wiedmann.\n",
                "subsections": []
            },
            "COPYRIGHT AND LICENSE": {
                "content": "Copyright (C) 2010-2013 by H.Merijn Brand & Jens Rehsack\n\nAll rights reserved.\n\nYou may freely distribute and/or modify this module under the terms of either the GNU General\nPublic License (GPL) or the Artistic License, as specified in the Perl README file.\n",
                "subsections": []
            }
        }
    }
}