Doxygen
Loading...
Searching...
No Matches
sqlite3gen.cpp File Reference
#include <stdlib.h>
#include <stdio.h>
#include <sstream>
#include "settings.h"
#include "message.h"
#include "sqlite3gen.h"
#include "doxygen.h"
#include "xmlgen.h"
#include "xmldocvisitor.h"
#include "config.h"
#include "util.h"
#include "outputlist.h"
#include "docparser.h"
#include "docnode.h"
#include "language.h"
#include "version.h"
#include "dot.h"
#include "arguments.h"
#include "classlist.h"
#include "filedef.h"
#include "namespacedef.h"
#include "filename.h"
#include "groupdef.h"
#include "membername.h"
#include "memberdef.h"
#include "pagedef.h"
#include "dirdef.h"
#include "section.h"
#include "fileinfo.h"
#include "dir.h"
#include "datetime.h"
#include "moduledef.h"
#include <sys/stat.h>
#include <string.h>
#include <sqlite3.h>
Include dependency graph for sqlite3gen.cpp:

Go to the source code of this file.

Classes

struct  SqlStmt
class  TextGeneratorSqlite3Impl
struct  Refid

Macros

#define DBG_CTX(x)

Functions

static bool bindTextParameter (SqlStmt &s, const char *name, const DString &value)
static bool bindIntParameter (SqlStmt &s, const char *name, int value)
static int step (SqlStmt &s, bool getRowId=false, bool select=false)
static int insertPath (DString name, bool local=true, bool found=true, int type=1)
static void recordMetadata ()
struct Refid insertRefid (const DString &refid)
static bool memberdefExists (struct Refid refid)
static bool memberdefIncomplete (struct Refid refid, const MemberDef *md)
static bool compounddefExists (struct Refid refid)
static bool insertMemberReference (struct Refid src_refid, struct Refid dst_refid, const char *context)
static void insertMemberReference (const MemberDef *src, const MemberDef *dst, const char *context)
static void insertMemberFunctionParams (int memberdef_id, const MemberDef *md, const Definition *def)
static void insertMemberDefineParams (int memberdef_id, const MemberDef *md, const Definition *def)
static void associateMember (const MemberDef *md, struct Refid member_refid, struct Refid scope_refid)
static void stripQualifiers (DString &typeStr)
static int prepareStatement (sqlite3 *db, SqlStmt &s)
static int prepareStatements (sqlite3 *db)
static void beginTransaction (sqlite3 *db)
static void endTransaction (sqlite3 *db)
static void pragmaTuning (sqlite3 *db)
static int initializeTables (sqlite3 *db)
static int initializeViews (sqlite3 *db)
static void writeInnerClasses (const ClassLinkedRefMap &cl, struct Refid outer_refid)
static void writeInnerConcepts (const ConceptLinkedRefMap &cl, struct Refid outer_refid)
static void writeInnerModules (const ModuleLinkedRefMap &ml, struct Refid outer_refid)
static void writeInnerPages (const PageLinkedRefMap &pl, struct Refid outer_refid)
static void writeInnerGroups (const GroupList &gl, struct Refid outer_refid)
static void writeInnerFiles (const FileList &fl, struct Refid outer_refid)
static void writeInnerDirs (const DirList &dl, struct Refid outer_refid)
static void writeInnerNamespaces (const NamespaceLinkedRefMap &nl, struct Refid outer_refid)
static void writeTemplateArgumentList (const ArgumentList &al, const Definition *scope, const FileDef *fileScope)
static void writeMemberTemplateLists (const MemberDef *md)
static void writeTemplateList (const ClassDef *cd)
static void writeTemplateList (const ConceptDef *cd)
DString getSQLDocBlock (const Definition *scope, const Definition *def, const DString &doc, const DString &fileName, int lineNr)
static void getSQLDesc (SqlStmt &s, const char *col, const DString &value, const Definition *def)
static void getSQLDescCompound (SqlStmt &s, const char *col, const DString &value, const Definition *def)
static void generateSqlite3ForMember (const MemberDef *md, struct Refid scope_refid, const Definition *def)
static void generateSqlite3Section (const Definition *d, const MemberList *ml, struct Refid scope_refid, const char *, const DString &=DString(), const DString &=DString())
static void associateAllClassMembers (const ClassDef *cd, struct Refid scope_refid)
static void generateSqlite3ForClass (const ClassDef *cd)
static void generateSqlite3ForConcept (const ConceptDef *cd)
static void generateSqlite3ForModule (const ModuleDef *mod)
static void generateSqlite3ForNamespace (const NamespaceDef *nd)
static void generateSqlite3ForFile (const FileDef *fd)
static void generateSqlite3ForGroup (const GroupDef *gd)
static void generateSqlite3ForDir (const DirDef *dd)
static void generateSqlite3ForPage (const PageDef *pd, bool isExample)
static sqlite3 * openDbConnection ()
void generateSqlite3 ()

Variables

const char * table_schema [][2]
const char * view_schema [][2]
SqlStmt meta_insert
SqlStmt incl_insert
SqlStmt incl_select
SqlStmt contains_insert
SqlStmt path_select
SqlStmt path_insert
SqlStmt refid_select
SqlStmt refid_insert
SqlStmt xrefs_insert
SqlStmt reimplements_insert
SqlStmt memberdef_exists
SqlStmt memberdef_incomplete
SqlStmt memberdef_insert
SqlStmt memberdef_update_decl
SqlStmt memberdef_update_def
SqlStmt member_insert
SqlStmt compounddef_insert
SqlStmt compounddef_exists
SqlStmt compoundref_insert
SqlStmt param_select
SqlStmt param_insert
SqlStmt memberdef_param_insert

Macro Definition Documentation

◆ DBG_CTX

#define DBG_CTX ( x)
Value:
do { } while(0)

Definition at line 67 of file sqlite3gen.cpp.

Referenced by TextGeneratorSqlite3Impl::writeBreak().

Function Documentation

◆ associateAllClassMembers()

void associateAllClassMembers ( const ClassDef * cd,
struct Refid scope_refid )
static

Definition at line 1890 of file sqlite3gen.cpp.

1891{
1892 for (auto &mni : cd->memberNameInfoLinkedMap())
1893 {
1894 for (auto &mi : *mni)
1895 {
1896 const MemberDef *md = mi->memberDef();
1897 DString qrefid = md->getOutputFileBase() + "_1" + md->anchor();
1898 associateMember(md, insertRefid(qrefid), scope_refid);
1899 }
1900 }
1901}
virtual const MemberNameInfoLinkedMap & memberNameInfoLinkedMap() const =0
Returns a dictionary of all members.
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:89
virtual DString anchor() const =0
virtual DString getOutputFileBase() const =0
A model of a class/file/namespace member symbol.
Definition memberdef.h:48
struct Refid insertRefid(const DString &refid)
static void associateMember(const MemberDef *md, struct Refid member_refid, struct Refid scope_refid)

References Definition::anchor(), associateAllClassMembers(), associateMember(), Definition::getOutputFileBase(), insertRefid(), and ClassDef::memberNameInfoLinkedMap().

Referenced by associateAllClassMembers(), and generateSqlite3ForClass().

◆ associateMember()

void associateMember ( const MemberDef * md,
struct Refid member_refid,
struct Refid scope_refid )
static

Definition at line 1126 of file sqlite3gen.cpp.

1127{
1128 // TODO: skip EnumValue only to guard against recording refids and member records
1129 // for enumvalues until we can support documenting them as entities.
1130 if (md->memberType()==MemberType::EnumValue) return;
1131 if (!md->isAnonymous()) // skip anonymous members
1132 {
1133 bindIntParameter(member_insert, ":scope_rowid", scope_refid.rowid);
1134 bindIntParameter(member_insert, ":memberdef_rowid", member_refid.rowid);
1135
1136 bindIntParameter(member_insert, ":prot", static_cast<int>(md->protection()));
1137 bindIntParameter(member_insert, ":virt", static_cast<int>(md->virtualness()));
1139 }
1140}
virtual bool isAnonymous() const =0
virtual Protection protection() const =0
virtual MemberType memberType() const =0
virtual Specifier virtualness(int count=0) const =0
SqlStmt member_insert
static int step(SqlStmt &s, bool getRowId=false, bool select=false)
static bool bindIntParameter(SqlStmt &s, const char *name, int value)
int rowid

References associateMember(), bindIntParameter(), Definition::isAnonymous(), member_insert, MemberDef::memberType(), MemberDef::protection(), Refid::rowid, step(), and MemberDef::virtualness().

Referenced by associateAllClassMembers(), associateMember(), and generateSqlite3ForMember().

◆ beginTransaction()

void beginTransaction ( sqlite3 * db)
static

Definition at line 1199 of file sqlite3gen.cpp.

1200{
1201 char * sErrMsg = nullptr;
1202 sqlite3_exec(db, "BEGIN TRANSACTION", nullptr, nullptr, &sErrMsg);
1203}

References beginTransaction().

Referenced by beginTransaction(), and generateSqlite3().

◆ bindIntParameter()

bool bindIntParameter ( SqlStmt & s,
const char * name,
int value )
static

Definition at line 880 of file sqlite3gen.cpp.

881{
882 int idx = sqlite3_bind_parameter_index(s.stmt, name);
883 if (idx==0) {
884 err("sqlite3_bind_parameter_index({})[{}] failed to find column: {}\n", name, s.query, sqlite3_errmsg(s.db));
885 return false;
886 }
887 int rv = sqlite3_bind_int(s.stmt, idx, value);
888 if (rv!=SQLITE_OK) {
889 err("sqlite3_bind_int({})[{}] failed: {}\n", name, s.query, sqlite3_errmsg(s.db));
890 return false;
891 }
892 return true;
893}
#define err(fmt,...)
Definition message.h:127
const char * query
sqlite3 * db
sqlite3_stmt * stmt

References bindIntParameter(), SqlStmt::db, err, SqlStmt::query, and SqlStmt::stmt.

Referenced by associateMember(), bindIntParameter(), compounddefExists(), generateSqlite3ForClass(), generateSqlite3ForConcept(), generateSqlite3ForDir(), generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForMember(), generateSqlite3ForModule(), generateSqlite3ForNamespace(), generateSqlite3ForPage(), insertMemberDefineParams(), insertMemberFunctionParams(), insertMemberReference(), insertPath(), memberdefExists(), memberdefIncomplete(), writeInnerClasses(), writeInnerConcepts(), writeInnerDirs(), writeInnerFiles(), writeInnerGroups(), writeInnerModules(), writeInnerNamespaces(), and writeInnerPages().

◆ bindTextParameter()

bool bindTextParameter ( SqlStmt & s,
const char * name,
const DString & value )
static

Definition at line 865 of file sqlite3gen.cpp.

866{
867 int idx = sqlite3_bind_parameter_index(s.stmt, name);
868 if (idx==0) {
869 err("sqlite3_bind_parameter_index({})[{}] failed: {}\n", name, s.query, sqlite3_errmsg(s.db));
870 return false;
871 }
872 int rv = sqlite3_bind_text(s.stmt, idx, value.data(), -1, SQLITE_TRANSIENT);
873 if (rv!=SQLITE_OK) {
874 err("sqlite3_bind_text({})[{}] failed: {}\n", name, s.query, sqlite3_errmsg(s.db));
875 return false;
876 }
877 return true;
878}
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition dstring.h:162

References bindTextParameter(), DString::data(), SqlStmt::db, err, SqlStmt::query, and SqlStmt::stmt.

Referenced by bindTextParameter(), generateSqlite3ForClass(), generateSqlite3ForConcept(), generateSqlite3ForDir(), generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForMember(), generateSqlite3ForModule(), generateSqlite3ForNamespace(), generateSqlite3ForPage(), getSQLDesc(), getSQLDescCompound(), insertMemberDefineParams(), insertMemberFunctionParams(), insertMemberReference(), insertPath(), insertRefid(), recordMetadata(), and writeTemplateArgumentList().

◆ compounddefExists()

◆ endTransaction()

void endTransaction ( sqlite3 * db)
static

Definition at line 1205 of file sqlite3gen.cpp.

1206{
1207 char * sErrMsg = nullptr;
1208 sqlite3_exec(db, "END TRANSACTION", nullptr, nullptr, &sErrMsg);
1209}

References endTransaction().

Referenced by endTransaction(), and generateSqlite3().

◆ generateSqlite3()

void generateSqlite3 ( )

Definition at line 2579 of file sqlite3gen.cpp.

2580{
2581 // + classes
2582 // + namespaces
2583 // + files
2584 // + groups
2585 // + related pages
2586 // + examples
2587 // + main page
2588 sqlite3 *db = openDbConnection();
2589 if (db==nullptr)
2590 {
2591 return;
2592 }
2593
2594# ifdef SQLITE3_DEBUG
2595 // debug: show all executed statements
2596 sqlite3_trace(db, &sqlLog, nullptr);
2597# endif
2598
2599 beginTransaction(db);
2600 pragmaTuning(db);
2601
2602 if (-1==initializeTables(db))
2603 return;
2604
2605 if ( -1 == prepareStatements(db) )
2606 {
2607 err("sqlite generator: prepareStatements failed!\n");
2608 return;
2609 }
2610
2612
2613 // + classes
2614 for (const auto &cd : *Doxygen::classLinkedMap)
2615 {
2616 msg("Generating Sqlite3 output for class {}\n",cd->name());
2617 generateSqlite3ForClass(cd.get());
2618 }
2619
2620 // + concepts
2621 for (const auto &cd : *Doxygen::conceptLinkedMap)
2622 {
2623 msg("Generating Sqlite3 output for concept {}\n",cd->name());
2624 generateSqlite3ForConcept(cd.get());
2625 }
2626
2627 // + modules
2628 for (const auto &mod : ModuleManager::instance().modules())
2629 {
2630 msg("Generating Sqlite3 output for module {}\n",mod->name());
2631 generateSqlite3ForModule(mod.get());
2632 }
2633
2634 // + namespaces
2635 for (const auto &nd : *Doxygen::namespaceLinkedMap)
2636 {
2637 msg("Generating Sqlite3 output for namespace {}\n",nd->name());
2639 }
2640
2641 // + files
2642 for (const auto &fn : *Doxygen::inputNameLinkedMap)
2643 {
2644 for (const auto &fd : *fn)
2645 {
2646 msg("Generating Sqlite3 output for file {}\n",fd->name());
2647 generateSqlite3ForFile(fd.get());
2648 }
2649 }
2650
2651 // + groups
2652 for (const auto &gd : *Doxygen::groupLinkedMap)
2653 {
2654 msg("Generating Sqlite3 output for group {}\n",gd->name());
2655 generateSqlite3ForGroup(gd.get());
2656 }
2657
2658 // + page
2659 for (const auto &pd : *Doxygen::pageLinkedMap)
2660 {
2661 msg("Generating Sqlite3 output for page {}\n",pd->name());
2662 generateSqlite3ForPage(pd.get(),false);
2663 }
2664
2665 // + dirs
2666 for (const auto &dd : *Doxygen::dirLinkedMap)
2667 {
2668 msg("Generating Sqlite3 output for dir {}\n",dd->name());
2669 generateSqlite3ForDir(dd.get());
2670 }
2671
2672 // + examples
2673 for (const auto &pd : *Doxygen::exampleLinkedMap)
2674 {
2675 msg("Generating Sqlite3 output for example {}\n",pd->name());
2676 generateSqlite3ForPage(pd.get(),true);
2677 }
2678
2679 // + main page
2681 {
2682 msg("Generating Sqlite3 output for the main page\n");
2684 }
2685
2686 // TODO: copied from initializeSchema; not certain if we should say/do more
2687 // if there's a failure here?
2688 if (-1==initializeViews(db))
2689 return;
2690
2691 endTransaction(db);
2692}
static NamespaceLinkedMap * namespaceLinkedMap
Definition doxygen.h:115
static ConceptLinkedMap * conceptLinkedMap
Definition doxygen.h:97
static std::unique_ptr< PageDef > mainPage
Definition doxygen.h:100
static FileNameLinkedMap * inputNameLinkedMap
Definition doxygen.h:104
static ClassLinkedMap * classLinkedMap
Definition doxygen.h:95
static PageLinkedMap * exampleLinkedMap
Definition doxygen.h:98
static PageLinkedMap * pageLinkedMap
Definition doxygen.h:99
static DirLinkedMap * dirLinkedMap
Definition doxygen.h:127
static GroupLinkedMap * groupLinkedMap
Definition doxygen.h:114
static ModuleManager & instance()
#define msg(fmt,...)
Definition message.h:94
static void recordMetadata()
static int initializeTables(sqlite3 *db)
static void generateSqlite3ForModule(const ModuleDef *mod)
static void beginTransaction(sqlite3 *db)
static void generateSqlite3ForConcept(const ConceptDef *cd)
static void generateSqlite3ForGroup(const GroupDef *gd)
static int prepareStatements(sqlite3 *db)
static void endTransaction(sqlite3 *db)
static void generateSqlite3ForDir(const DirDef *dd)
static int initializeViews(sqlite3 *db)
static sqlite3 * openDbConnection()
static void generateSqlite3ForClass(const ClassDef *cd)
static void generateSqlite3ForNamespace(const NamespaceDef *nd)
static void generateSqlite3ForFile(const FileDef *fd)
static void generateSqlite3ForPage(const PageDef *pd, bool isExample)
static void pragmaTuning(sqlite3 *db)

References beginTransaction(), Doxygen::classLinkedMap, Doxygen::conceptLinkedMap, Doxygen::dirLinkedMap, endTransaction(), err, Doxygen::exampleLinkedMap, generateSqlite3(), generateSqlite3ForClass(), generateSqlite3ForConcept(), generateSqlite3ForDir(), generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForModule(), generateSqlite3ForNamespace(), generateSqlite3ForPage(), Doxygen::groupLinkedMap, initializeTables(), initializeViews(), Doxygen::inputNameLinkedMap, ModuleManager::instance(), Doxygen::mainPage, msg, Doxygen::namespaceLinkedMap, openDbConnection(), Doxygen::pageLinkedMap, pragmaTuning(), prepareStatements(), and recordMetadata().

Referenced by generateOutput(), and generateSqlite3().

◆ generateSqlite3ForClass()

void generateSqlite3ForClass ( const ClassDef * cd)
static

Definition at line 1906 of file sqlite3gen.cpp.

1907{
1908 // NOTE: Skeptical about XML's version of these
1909 // 'x' marks missing items XML claims to include
1910
1911 // + brief description
1912 // + detailed description
1913 // + template argument list(s)
1914 // + include file
1915 // + member groups
1916 // x inheritance DOT diagram
1917 // + list of direct super classes
1918 // + list of direct sub classes
1919 // + list of inner classes
1920 // x collaboration DOT diagram
1921 // + list of all members
1922 // x user defined member sections
1923 // x standard member sections
1924 // x detailed member documentation
1925 // - examples using the class
1926
1927 if (cd->isReference()) return; // skip external references.
1928 if (cd->isHidden()) return; // skip hidden classes.
1929 if (cd->isAnonymous()) return; // skip anonymous compounds.
1930 if (cd->isImplicitTemplateInstance()) return; // skip generated template instances.
1931
1932 struct Refid refid = insertRefid(cd->getOutputFileBase());
1933
1934 // can omit a class that already has a refid
1935 if(!refid.created && compounddefExists(refid)){return;}
1936
1937 bindIntParameter(compounddef_insert,":rowid", refid.rowid);
1938
1942 bindIntParameter(compounddef_insert,":prot",static_cast<int>(cd->protection()));
1943
1944 int file_id = insertPath(cd->getDefFileName());
1945 bindIntParameter(compounddef_insert,":file_id",file_id);
1948
1949 // + include file
1950 /*
1951 TODO: I wonder if this can actually be cut (just here)
1952
1953 We were adding this "include" to the "includes" table alongside
1954 other includes (from a FileDef). However, FileDef and ClassDef are using
1955 "includes" nodes in very a different way:
1956 - With FileDef, it means the file includes another.
1957 - With ClassDef, it means you should include this file to use this class.
1958
1959 Because of this difference, I added a column to compounddef, header_id, and
1960 linked it back to the appropriate file. We could just add a nullable text
1961 column that would hold a string equivalent to what the HTML docs include,
1962 but the logic for generating it is embedded in
1963 ClassDef::writeIncludeFiles(OutputList &ol).
1964
1965 That said, at least on the handful of test sets I have, header_id == file_id,
1966 suggesting it could be cut and clients might be able to reconstruct it from
1967 other values if there's a solid heuristic for *when a class will
1968 have a header file*.
1969 */
1970 const IncludeInfo *ii=cd->includeInfo();
1971 if (ii)
1972 {
1973 DString nm = ii->includeName;
1974 if (nm.empty() && ii->fileDef) nm = ii->fileDef->docName();
1975 if (!nm.empty())
1976 {
1977 int header_id=-1;
1978 if (ii->fileDef)
1979 {
1981 }
1982 DBG_CTX(("-----> ClassDef includeInfo for %s\n", qPrint(nm)));
1983 DBG_CTX((" local : %d\n", ii->local));
1984 DBG_CTX((" imported : %d\n", ii->imported));
1985 if (ii->fileDef)
1986 {
1987 DBG_CTX(("header: %s\n", qPrint(ii->fileDef->absFilePath())));
1988 }
1989 DBG_CTX((" file_id : %d\n", file_id));
1990 DBG_CTX((" header_id: %d\n", header_id));
1991
1992 if(header_id!=-1)
1993 {
1994 bindIntParameter(compounddef_insert,":header_id",header_id);
1995 }
1996 }
1997 }
1998
1999 getSQLDescCompound(compounddef_insert,":briefdescription",cd->briefDescription(),cd);
2000 getSQLDescCompound(compounddef_insert,":detaileddescription",cd->documentation(),cd);
2001
2003
2004 // + list of direct super classes
2005 for (const auto &bcd : cd->baseClasses())
2006 {
2007 struct Refid base_refid = insertRefid(bcd.classDef->getOutputFileBase());
2008 struct Refid derived_refid = insertRefid(cd->getOutputFileBase());
2009 bindIntParameter(compoundref_insert,":base_rowid", base_refid.rowid);
2010 bindIntParameter(compoundref_insert,":derived_rowid", derived_refid.rowid);
2011 bindIntParameter(compoundref_insert,":prot",static_cast<int>(bcd.prot));
2012 bindIntParameter(compoundref_insert,":virt",static_cast<int>(bcd.virt));
2014 }
2015
2016 // + list of direct sub classes
2017 for (const auto &bcd : cd->subClasses())
2018 {
2019 struct Refid derived_refid = insertRefid(bcd.classDef->getOutputFileBase());
2020 struct Refid base_refid = insertRefid(cd->getOutputFileBase());
2021 bindIntParameter(compoundref_insert,":base_rowid", base_refid.rowid);
2022 bindIntParameter(compoundref_insert,":derived_rowid", derived_refid.rowid);
2023 bindIntParameter(compoundref_insert,":prot",static_cast<int>(bcd.prot));
2024 bindIntParameter(compoundref_insert,":virt",static_cast<int>(bcd.virt));
2026 }
2027
2028 // + list of inner classes
2030
2031 // + template argument list(s)
2033
2034 // + member groups
2035 for (const auto &mg : cd->getMemberGroups())
2036 {
2037 generateSqlite3Section(cd,&mg->members(),refid,"user-defined",mg->header(),
2038 mg->documentation());
2039 }
2040
2041 // this is just a list of *local* members
2042 for (const auto &ml : cd->getMemberLists())
2043 {
2044 if (!ml->listType().isDetailed())
2045 {
2046 generateSqlite3Section(cd,ml.get(),refid,"user-defined");
2047 }
2048 }
2049
2050 // + list of all members
2052}
virtual const MemberLists & getMemberLists() const =0
Returns the list containing the list of members sorted per type.
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
virtual DString compoundTypeString() const =0
Returns the type of compound as a string.
virtual bool isImplicitTemplateInstance() const =0
virtual const MemberGroupList & getMemberGroups() const =0
Returns the member groups defined for this class.
virtual ClassLinkedRefMap getClasses() const =0
returns the classes nested into this class
virtual const IncludeInfo * includeInfo() const =0
virtual DString title() const =0
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:153
virtual DString briefDescription(bool abbreviate=false) const =0
virtual DString getDefFileName() const =0
virtual DString documentation() const =0
virtual int getDefLine() const =0
virtual const DString & name() const =0
virtual bool isHidden() const =0
virtual int getDefColumn() const =0
virtual bool isReference() const =0
virtual DString absFilePath() const =0
virtual const DString & docName() const =0
#define DBG_CTX(x)
Definition code.l:73
const char * qPrint(const char *s)
Definition dstring.h:769
static bool compounddefExists(struct Refid refid)
SqlStmt compoundref_insert
static void writeInnerClasses(const ClassLinkedRefMap &cl, struct Refid outer_refid)
static void writeTemplateList(const ClassDef *cd)
static void generateSqlite3Section(const Definition *d, const MemberList *ml, struct Refid scope_refid, const char *, const DString &=DString(), const DString &=DString())
static void associateAllClassMembers(const ClassDef *cd, struct Refid scope_refid)
static int insertPath(DString name, bool local=true, bool found=true, int type=1)
static void getSQLDescCompound(SqlStmt &s, const char *col, const DString &value, const Definition *def)
static bool bindTextParameter(SqlStmt &s, const char *name, const DString &value)
SqlStmt compounddef_insert
Class representing the data associated with a #include statement.
Definition filedef.h:75
const FileDef * fileDef
Definition filedef.h:79
DString includeName
Definition filedef.h:80
DString refid

References FileDef::absFilePath(), associateAllClassMembers(), ClassDef::baseClasses(), bindIntParameter(), bindTextParameter(), Definition::briefDescription(), compounddef_insert, compounddefExists(), compoundref_insert, ClassDef::compoundTypeString(), DBG_CTX, FileDef::docName(), Definition::documentation(), DString::empty(), IncludeInfo::fileDef, generateSqlite3ForClass(), generateSqlite3Section(), ClassDef::getClasses(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), ClassDef::getMemberGroups(), ClassDef::getMemberLists(), Definition::getOutputFileBase(), getSQLDescCompound(), ClassDef::includeInfo(), IncludeInfo::includeName, insertPath(), insertRefid(), Definition::isAnonymous(), MemberListType::isDetailed(), Definition::isHidden(), ClassDef::isImplicitTemplateInstance(), Definition::isReference(), MemberList::listType(), Definition::name(), ClassDef::protection(), qPrint(), Refid::refid, Refid::rowid, step(), ClassDef::subClasses(), ClassDef::title(), writeInnerClasses(), and writeTemplateList().

Referenced by generateSqlite3(), and generateSqlite3ForClass().

◆ generateSqlite3ForConcept()

void generateSqlite3ForConcept ( const ConceptDef * cd)
static

Definition at line 2054 of file sqlite3gen.cpp.

2055{
2056 if (cd->isReference() || cd->isHidden()) return; // skip external references
2057
2058 struct Refid refid = insertRefid(cd->getOutputFileBase());
2059 if(!refid.created && compounddefExists(refid)){return;}
2060 bindIntParameter(compounddef_insert,":rowid", refid.rowid);
2062 bindTextParameter(compounddef_insert,":kind","concept");
2063
2064 int file_id = insertPath(cd->getDefFileName());
2065 bindIntParameter(compounddef_insert,":file_id",file_id);
2068
2069 getSQLDescCompound(compounddef_insert,":briefdescription",cd->briefDescription(),cd);
2070 getSQLDescCompound(compounddef_insert,":detaileddescription",cd->documentation(),cd);
2071
2073
2074 // + template argument list(s)
2076}

References bindIntParameter(), bindTextParameter(), Definition::briefDescription(), compounddef_insert, compounddefExists(), Definition::documentation(), generateSqlite3ForConcept(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), Definition::getOutputFileBase(), getSQLDescCompound(), insertPath(), insertRefid(), Definition::isHidden(), Definition::isReference(), Definition::name(), Refid::refid, step(), and writeTemplateList().

Referenced by generateSqlite3(), and generateSqlite3ForConcept().

◆ generateSqlite3ForDir()

void generateSqlite3ForDir ( const DirDef * dd)
static

Definition at line 2415 of file sqlite3gen.cpp.

2416{
2417 // + dirs
2418 // + files
2419 // + briefdescription
2420 // + detaileddescription
2421 // + location (below uses file_id, line, column; XML just uses file)
2422 if (dd->isReference()) return; // skip external references
2423
2424 struct Refid refid = insertRefid(dd->getOutputFileBase());
2425 if(!refid.created && compounddefExists(refid)){return;}
2426 bindIntParameter(compounddef_insert,":rowid", refid.rowid);
2427
2430
2431 int file_id = insertPath(dd->getDefFileName(),true,true,2);
2432 bindIntParameter(compounddef_insert,":file_id",file_id);
2433
2434 /*
2435 line and column are weird here, but:
2436 - dir goes into compounddef with all of the others
2437 - the semantics would be fine if we set them to NULL here
2438 - but defining line and column as NOT NULL is an important promise
2439 for other compounds, so I don't want to loosen it
2440
2441 For reference, the queries return 1.
2442 0 or -1 make more sense, but I see that as a change for DirDef.
2443 */
2446
2447 getSQLDesc(compounddef_insert,":briefdescription",dd->briefDescription(),dd);
2448 getSQLDesc(compounddef_insert,":detaileddescription",dd->documentation(),dd);
2449
2451
2452 // + files
2454
2455 // + files
2457}
virtual DString displayName(bool includeScope=true) const =0
virtual const DirList & subDirs() const =0
virtual const FileList & getFiles() const =0
static void getSQLDesc(SqlStmt &s, const char *col, const DString &value, const Definition *def)
static void writeInnerFiles(const FileList &fl, struct Refid outer_refid)
static void writeInnerDirs(const DirList &dl, struct Refid outer_refid)

References bindIntParameter(), bindTextParameter(), Definition::briefDescription(), compounddef_insert, compounddefExists(), Definition::displayName(), Definition::documentation(), generateSqlite3ForDir(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), DirDef::getFiles(), Definition::getOutputFileBase(), getSQLDesc(), insertPath(), insertRefid(), Definition::isReference(), Refid::refid, step(), DirDef::subDirs(), writeInnerDirs(), and writeInnerFiles().

Referenced by generateSqlite3(), and generateSqlite3ForDir().

◆ generateSqlite3ForFile()

void generateSqlite3ForFile ( const FileDef * fd)
static

Definition at line 2191 of file sqlite3gen.cpp.

2192{
2193 // + includes files
2194 // + includedby files
2195 // x include graph
2196 // x included by graph
2197 // + contained class definitions
2198 // + contained namespace definitions
2199 // + member groups
2200 // + normal members
2201 // + brief desc
2202 // + detailed desc
2203 // x source code
2204 // + location (file_id, line, column)
2205 // - number of lines
2206
2207 if (fd->isReference()) return; // skip external references
2208
2209 struct Refid refid = insertRefid(fd->getOutputFileBase());
2210 if(!refid.created && compounddefExists(refid)){return;}
2211 bindIntParameter(compounddef_insert,":rowid", refid.rowid);
2212
2215 bindTextParameter(compounddef_insert,":kind","file");
2216
2217 int file_id = insertPath(fd->getDefFileName());
2218 bindIntParameter(compounddef_insert,":file_id",file_id);
2221
2222 getSQLDesc(compounddef_insert,":briefdescription",fd->briefDescription(),fd);
2223 getSQLDesc(compounddef_insert,":detaileddescription",fd->documentation(),fd);
2224
2226
2227 // + includes files
2228 for (const auto &ii : fd->includeFileList())
2229 {
2230 int src_id=insertPath(fd->absFilePath(),!fd->isReference());
2231 int dst_id=0;
2232 DString dst_path;
2233 bool isLocal = (ii.kind & IncludeKind_LocalMask)!=0;
2234
2235 if(ii.fileDef) // found file
2236 {
2237 if(ii.fileDef->isReference())
2238 {
2239 // strip tagfile from path
2240 DString tagfile = ii.fileDef->getReference();
2241 dst_path = ii.fileDef->absFilePath();
2242 dst_path.stripPrefix(tagfile+":");
2243 }
2244 else
2245 {
2246 dst_path = ii.fileDef->absFilePath();
2247 }
2248 dst_id = insertPath(dst_path,isLocal);
2249 }
2250 else // can't find file
2251 {
2252 dst_id = insertPath(ii.includeName,isLocal,false);
2253 }
2254
2255 DBG_CTX(("-----> FileDef includeInfo for %s\n", qPrint(ii.includeName)));
2256 DBG_CTX((" local: %d\n", isLocal));
2257 DBG_CTX((" imported: %d\n", (ii.kind & IncludeKind_ImportMask)!=0));
2258 if(ii.fileDef)
2259 {
2260 DBG_CTX(("include: %s\n", qPrint(ii.fileDef->absFilePath())));
2261 }
2262 DBG_CTX((" src_id : %d\n", src_id));
2263 DBG_CTX((" dst_id: %d\n", dst_id));
2264
2265 bindIntParameter(incl_select,":local",isLocal);
2266 bindIntParameter(incl_select,":src_id",src_id);
2267 bindIntParameter(incl_select,":dst_id",dst_id);
2268 if (step(incl_select,true,true)==0) {
2269 bindIntParameter(incl_insert,":local",isLocal);
2270 bindIntParameter(incl_insert,":src_id",src_id);
2271 bindIntParameter(incl_insert,":dst_id",dst_id);
2273 }
2274 }
2275
2276 // + includedby files
2277 for (const auto &ii : fd->includedByFileList())
2278 {
2279 int dst_id=insertPath(fd->absFilePath(),!fd->isReference());
2280 int src_id=0;
2281 DString src_path;
2282 bool isLocal = (ii.kind & IncludeKind_LocalMask)!=0;
2283
2284 if(ii.fileDef) // found file
2285 {
2286 if(ii.fileDef->isReference())
2287 {
2288 // strip tagfile from path
2289 DString tagfile = ii.fileDef->getReference();
2290 src_path = ii.fileDef->absFilePath();
2291 src_path.stripPrefix(tagfile+":");
2292 }
2293 else
2294 {
2295 src_path = ii.fileDef->absFilePath();
2296 }
2297 src_id = insertPath(src_path,isLocal);
2298 }
2299 else // can't find file
2300 {
2301 src_id = insertPath(ii.includeName,isLocal,false);
2302 }
2303
2304 bindIntParameter(incl_select,":local",isLocal);
2305 bindIntParameter(incl_select,":src_id",src_id);
2306 bindIntParameter(incl_select,":dst_id",dst_id);
2307 if (step(incl_select,true,true)==0) {
2308 bindIntParameter(incl_insert,":local",isLocal);
2309 bindIntParameter(incl_insert,":src_id",src_id);
2310 bindIntParameter(incl_insert,":dst_id",dst_id);
2312 }
2313 }
2314
2315 // + contained class definitions
2317
2318 // + contained concept definitions
2320
2321 // + contained namespace definitions
2323
2324 // + member groups
2325 for (const auto &mg : fd->getMemberGroups())
2326 {
2327 generateSqlite3Section(fd,&mg->members(),refid,"user-defined",mg->header(),
2328 mg->documentation());
2329 }
2330
2331 // + normal members
2332 for (const auto &ml : fd->getMemberLists())
2333 {
2334 if (ml->listType().isDeclaration())
2335 {
2336 generateSqlite3Section(fd,ml.get(),refid,"user-defined");
2337 }
2338 }
2339}
bool stripPrefix(const DString &prefix)
Definition dstring.h:295
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual const MemberGroupList & getMemberGroups() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual const IncludeInfoList & includeFileList() const =0
virtual const MemberLists & getMemberLists() const =0
virtual DString title() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const IncludeInfoList & includedByFileList() const =0
constexpr uint32_t IncludeKind_ImportMask
Definition filedef.h:65
constexpr uint32_t IncludeKind_LocalMask
Definition filedef.h:63
SqlStmt incl_select
static void writeInnerConcepts(const ConceptLinkedRefMap &cl, struct Refid outer_refid)
static void writeInnerNamespaces(const NamespaceLinkedRefMap &nl, struct Refid outer_refid)
SqlStmt incl_insert

References FileDef::absFilePath(), bindIntParameter(), bindTextParameter(), Definition::briefDescription(), compounddef_insert, compounddefExists(), DBG_CTX, Definition::documentation(), generateSqlite3ForFile(), generateSqlite3Section(), FileDef::getClasses(), FileDef::getConcepts(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), FileDef::getMemberGroups(), FileDef::getMemberLists(), FileDef::getNamespaces(), Definition::getOutputFileBase(), getSQLDesc(), incl_insert, incl_select, FileDef::includedByFileList(), FileDef::includeFileList(), IncludeKind_ImportMask, IncludeKind_LocalMask, insertPath(), insertRefid(), MemberListType::isDeclaration(), Definition::isReference(), MemberList::listType(), Definition::name(), qPrint(), Refid::refid, step(), DString::stripPrefix(), FileDef::title(), writeInnerClasses(), writeInnerConcepts(), and writeInnerNamespaces().

Referenced by generateSqlite3(), and generateSqlite3ForFile().

◆ generateSqlite3ForGroup()

void generateSqlite3ForGroup ( const GroupDef * gd)
static

Definition at line 2342 of file sqlite3gen.cpp.

2343{
2344 // + members
2345 // + member groups
2346 // + files
2347 // + classes
2348 // + namespaces
2349 // - packages
2350 // + pages
2351 // + child groups
2352 // - examples
2353 // + brief description
2354 // + detailed description
2355
2356 if (gd->isReference()) return; // skip external references.
2357
2358 struct Refid refid = insertRefid(gd->getOutputFileBase());
2359 if(!refid.created && compounddefExists(refid)){return;}
2360 bindIntParameter(compounddef_insert,":rowid", refid.rowid);
2361
2364 bindTextParameter(compounddef_insert,":kind","group");
2365
2366 int file_id = insertPath(gd->getDefFileName());
2367 bindIntParameter(compounddef_insert,":file_id",file_id);
2370
2371 getSQLDesc(compounddef_insert,":briefdescription",gd->briefDescription(),gd);
2372 getSQLDesc(compounddef_insert,":detaileddescription",gd->documentation(),gd);
2373
2375
2376 // + files
2378
2379 // + classes
2381
2382 // + concepts
2384
2385 // + modules
2387
2388 // + namespaces
2390
2391 // + pages
2393
2394 // + groups
2396
2397 // + member groups
2398 for (const auto &mg : gd->getMemberGroups())
2399 {
2400 generateSqlite3Section(gd,&mg->members(),refid,"user-defined",mg->header(),
2401 mg->documentation());
2402 }
2403
2404 // + members
2405 for (const auto &ml : gd->getMemberLists())
2406 {
2407 if (ml->listType().isDeclaration())
2408 {
2409 generateSqlite3Section(gd,ml.get(),refid,"user-defined");
2410 }
2411 }
2412}
virtual DString groupTitle() const =0
virtual const GroupList & getSubGroups() const =0
virtual const FileList & getFiles() const =0
virtual const MemberLists & getMemberLists() const =0
virtual const MemberGroupList & getMemberGroups() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const PageLinkedRefMap & getPages() const =0
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual const ModuleLinkedRefMap & getModules() const =0
static void writeInnerGroups(const GroupList &gl, struct Refid outer_refid)
static void writeInnerPages(const PageLinkedRefMap &pl, struct Refid outer_refid)
static void writeInnerModules(const ModuleLinkedRefMap &ml, struct Refid outer_refid)

References bindIntParameter(), bindTextParameter(), Definition::briefDescription(), compounddef_insert, compounddefExists(), Definition::documentation(), generateSqlite3ForGroup(), generateSqlite3Section(), GroupDef::getClasses(), GroupDef::getConcepts(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), GroupDef::getFiles(), GroupDef::getMemberGroups(), GroupDef::getMemberLists(), GroupDef::getModules(), GroupDef::getNamespaces(), Definition::getOutputFileBase(), GroupDef::getPages(), getSQLDesc(), GroupDef::getSubGroups(), GroupDef::groupTitle(), insertPath(), insertRefid(), MemberListType::isDeclaration(), Definition::isReference(), MemberList::listType(), Definition::name(), Refid::refid, step(), writeInnerClasses(), writeInnerConcepts(), writeInnerFiles(), writeInnerGroups(), writeInnerModules(), writeInnerNamespaces(), and writeInnerPages().

Referenced by generateSqlite3(), and generateSqlite3ForGroup().

◆ generateSqlite3ForMember()

void generateSqlite3ForMember ( const MemberDef * md,
struct Refid scope_refid,
const Definition * def )
static

Definition at line 1553 of file sqlite3gen.cpp.

1554{
1555 // + declaration/definition arg lists
1556 // + reimplements
1557 // + reimplementedBy
1558 // - exceptions
1559 // + const/volatile specifiers
1560 // - examples
1561 // + source definition
1562 // + source references
1563 // + source referenced by
1564 // - body code
1565 // + template arguments
1566 // (templateArguments(), definitionTemplateParameterLists())
1567 // - call graph
1568
1569 // enum values are written as part of the enum
1570 if (md->memberType()==MemberType::EnumValue) return;
1571 if (md->isHidden()) return;
1572
1573 DString memType;
1574
1575 // memberdef
1576 DString qrefid = md->getOutputFileBase() + "_1" + md->anchor();
1577 struct Refid refid = insertRefid(qrefid);
1578
1579 associateMember(md, refid, scope_refid);
1580
1581 // compacting duplicate defs
1582 if(!refid.created && memberdefExists(refid) && memberdefIncomplete(refid, md))
1583 {
1584 /*
1585 For performance, ideal to skip a member we've already added.
1586 Unfortunately, we can have two memberdefs with the same refid documenting
1587 the declaration and definition. memberdefIncomplete() uses the 'inline'
1588 value to figure this out. Once we get to this point, we should *only* be
1589 seeing the *other* type of def/decl, so we'll set inline to a new value (2),
1590 indicating that this entry covers both inline types.
1591 */
1592 struct SqlStmt memberdef_update;
1593
1594 // definitions have bodyfile/start/end
1595 if (md->getStartBodyLine()!=-1)
1596 {
1597 memberdef_update = memberdef_update_def;
1598 int bodyfile_id = insertPath(md->getBodyDef()->absFilePath(),!md->getBodyDef()->isReference());
1599 if (bodyfile_id == -1)
1600 {
1601 sqlite3_clear_bindings(memberdef_update.stmt);
1602 }
1603 else
1604 {
1605 bindIntParameter(memberdef_update,":bodyfile_id",bodyfile_id);
1606 bindIntParameter(memberdef_update,":bodystart",md->getStartBodyLine());
1607 bindIntParameter(memberdef_update,":bodyend",md->getEndBodyLine());
1608 }
1609 }
1610 // declarations don't
1611 else
1612 {
1613 memberdef_update = memberdef_update_decl;
1614 if (md->getDefLine() != -1)
1615 {
1616 int file_id = insertPath(md->getDefFileName(),!md->isReference());
1617 if (file_id!=-1)
1618 {
1619 bindIntParameter(memberdef_update,":file_id",file_id);
1620 bindIntParameter(memberdef_update,":line",md->getDefLine());
1621 bindIntParameter(memberdef_update,":column",md->getDefColumn());
1622 }
1623 }
1624 }
1625
1626 bindIntParameter(memberdef_update, ":rowid", refid.rowid);
1627 // value 2 indicates we've seen "both" inline types.
1628 bindIntParameter(memberdef_update,":inline", 2);
1629
1630 /* in case both are used, append/prepend descriptions */
1631 getSQLDesc(memberdef_update,":briefdescription",md->briefDescription(),md);
1632 getSQLDesc(memberdef_update,":detaileddescription",md->documentation(),md);
1633 getSQLDesc(memberdef_update,":inbodydescription",md->inbodyDocumentation(),md);
1634
1635 step(memberdef_update,true);
1636
1637 // don't think we need to repeat params; should have from first encounter
1638
1639 // + source references
1640 // The cross-references in initializers only work when both the src and dst
1641 // are defined.
1642 auto refList = md->getReferencesMembers();
1643 for (const auto &rmd : refList)
1644 {
1645 insertMemberReference(md,rmd, "inline");
1646 }
1647 // + source referenced by
1648 auto refByList = md->getReferencedByMembers();
1649 for (const auto &rmd : refByList)
1650 {
1651 insertMemberReference(rmd,md, "inline");
1652 }
1653 return;
1654 }
1655
1656 bindIntParameter(memberdef_insert,":rowid", refid.rowid);
1658 bindIntParameter(memberdef_insert,":prot",static_cast<int>(md->protection()));
1659
1662
1663 bool isFunc=to_isFunction(md->memberType());
1664
1665 if (isFunc)
1666 {
1667 const ArgumentList &al = md->argumentList();
1670 bindIntParameter(memberdef_insert,":explicit",md->isExplicit());
1675 bindIntParameter(memberdef_insert,":optional",md->isOptional());
1676 bindIntParameter(memberdef_insert,":required",md->isRequired());
1677
1678 bindIntParameter(memberdef_insert,":virt",static_cast<int>(md->virtualness()));
1679 }
1680
1681 if (md->memberType() == MemberType::Variable)
1682 {
1684 bindIntParameter(memberdef_insert,":thread_local",md->isThreadLocal());
1685 bindIntParameter(memberdef_insert,":initonly",md->isInitonly());
1686 bindIntParameter(memberdef_insert,":attribute",md->isAttribute());
1687 bindIntParameter(memberdef_insert,":property",md->isProperty());
1688 bindIntParameter(memberdef_insert,":readonly",md->isReadonly());
1690 bindIntParameter(memberdef_insert,":removable",md->isRemovable());
1691 bindIntParameter(memberdef_insert,":constrained",md->isConstrained());
1692 bindIntParameter(memberdef_insert,":transient",md->isTransient());
1693 bindIntParameter(memberdef_insert,":maybevoid",md->isMaybeVoid());
1694 bindIntParameter(memberdef_insert,":maybedefault",md->isMaybeDefault());
1695 bindIntParameter(memberdef_insert,":maybeambiguous",md->isMaybeAmbiguous());
1696 if (!md->bitfieldString().empty())
1697 {
1698 DString bitfield = md->bitfieldString();
1699 if (bitfield.at(0)==':') bitfield=bitfield.mid(1);
1700 bindTextParameter(memberdef_insert,":bitfield",bitfield.stripWhiteSpace());
1701 }
1702 }
1703 else if (md->memberType() == MemberType::Property)
1704 {
1705 bindIntParameter(memberdef_insert,":readable",md->isReadable());
1706 bindIntParameter(memberdef_insert,":writable",md->isWritable());
1707 bindIntParameter(memberdef_insert,":gettable",md->isGettable());
1708 bindIntParameter(memberdef_insert,":privategettable",md->isPrivateGettable());
1709 bindIntParameter(memberdef_insert,":protectedgettable",md->isProtectedGettable());
1710 bindIntParameter(memberdef_insert,":settable",md->isSettable());
1711 bindIntParameter(memberdef_insert,":privatesettable",md->isPrivateSettable());
1712 bindIntParameter(memberdef_insert,":protectedsettable",md->isProtectedSettable());
1713
1714 if (md->isAssign() || md->isCopy() || md->isRetain()
1715 || md->isStrong() || md->isWeak())
1716 {
1717 int accessor=0;
1718 if (md->isAssign()) accessor = 1;
1719 else if (md->isCopy()) accessor = 2;
1720 else if (md->isRetain()) accessor = 3;
1721 else if (md->isStrong()) accessor = 4;
1722 else if (md->isWeak()) accessor = 5;
1723
1724 bindIntParameter(memberdef_insert,":accessor",accessor);
1725 }
1728 }
1729 else if (md->memberType() == MemberType::Event)
1730 {
1732 bindIntParameter(memberdef_insert,":removable",md->isRemovable());
1733 bindIntParameter(memberdef_insert,":raisable",md->isRaisable());
1734 }
1735
1736 const MemberDef *rmd = md->reimplements();
1737 if (rmd)
1738 {
1739 DString qreimplemented_refid = rmd->getOutputFileBase() + "_1" + rmd->anchor();
1740
1741 struct Refid reimplemented_refid = insertRefid(qreimplemented_refid);
1742
1743 bindIntParameter(reimplements_insert,":memberdef_rowid", refid.rowid);
1744 bindIntParameter(reimplements_insert,":reimplemented_rowid", reimplemented_refid.rowid);
1746 }
1747
1748 LinkifyTextOptions options;
1749 options.setScope(def).setFileScope(md->getBodyDef()).setSelf(md);
1750
1751 // + declaration/definition arg lists
1752 if (md->memberType()!=MemberType::Define &&
1753 md->memberType()!=MemberType::Enumeration
1754 )
1755 {
1756 if (md->memberType()!=MemberType::Typedef)
1757 {
1759 }
1760 DString typeStr = md->typeString();
1761 stripQualifiers(typeStr);
1762 StringVector list;
1763 linkifyText(TextGeneratorSqlite3Impl(list),typeStr,options);
1764 if (!typeStr.empty())
1765 {
1766 bindTextParameter(memberdef_insert,":type",typeStr);
1767 }
1768
1769 if (!md->definition().empty())
1770 {
1771 bindTextParameter(memberdef_insert,":definition",md->definition());
1772 }
1773
1774 if (!md->argsString().empty())
1775 {
1776 bindTextParameter(memberdef_insert,":argsstring",md->argsString());
1777 }
1778 }
1779
1781
1782 // Extract references from initializer
1784 {
1785 bindTextParameter(memberdef_insert,":initializer",md->initializer());
1786
1787 StringVector list;
1789 for (const auto &s : list)
1790 {
1791 if (md->getBodyDef())
1792 {
1793 DBG_CTX(("initializer:%s %s %s %d\n",
1794 qPrint(md->anchor()),
1795 qPrint(s),
1797 md->getStartBodyLine()));
1798 DString qsrc_refid = md->getOutputFileBase() + "_1" + md->anchor();
1799 struct Refid src_refid = insertRefid(qsrc_refid);
1800 struct Refid dst_refid = insertRefid(s);
1801 insertMemberReference(src_refid,dst_refid, "initializer");
1802 }
1803 }
1804 }
1805
1806 if ( !md->getScopeString().empty() )
1807 {
1809 }
1810
1811 // +Brief, detailed and inbody description
1812 getSQLDesc(memberdef_insert,":briefdescription",md->briefDescription(),md);
1813 getSQLDesc(memberdef_insert,":detaileddescription",md->documentation(),md);
1814 getSQLDesc(memberdef_insert,":inbodydescription",md->inbodyDocumentation(),md);
1815
1816 // File location
1817 if (md->getDefLine() != -1)
1818 {
1819 int file_id = insertPath(md->getDefFileName(),!md->isReference());
1820 if (file_id!=-1)
1821 {
1822 bindIntParameter(memberdef_insert,":file_id",file_id);
1825
1826 // definitions also have bodyfile/start/end
1827 if (md->getStartBodyLine()!=-1)
1828 {
1829 int bodyfile_id = insertPath(md->getBodyDef()->absFilePath(),!md->getBodyDef()->isReference());
1830 if (bodyfile_id == -1)
1831 {
1832 sqlite3_clear_bindings(memberdef_insert.stmt);
1833 }
1834 else
1835 {
1836 bindIntParameter(memberdef_insert,":bodyfile_id",bodyfile_id);
1839 }
1840 }
1841 }
1842 }
1843
1844 int memberdef_id=step(memberdef_insert,true);
1845
1846 if (isFunc)
1847 {
1848 insertMemberFunctionParams(memberdef_id,md,def);
1849 }
1850 else if (md->memberType()==MemberType::Define &&
1851 !md->argsString().empty())
1852 {
1853 insertMemberDefineParams(memberdef_id,md,def);
1854 }
1855
1856 // + source references
1857 // The cross-references in initializers only work when both the src and dst
1858 // are defined.
1859 for (const auto &refmd : md->getReferencesMembers())
1860 {
1861 insertMemberReference(md,refmd, "inline");
1862 }
1863 // + source referenced by
1864 for (const auto &refmd : md->getReferencedByMembers())
1865 {
1866 insertMemberReference(refmd,md, "inline");
1867 }
1868}
This class represents an function or template argument list.
Definition arguments.h:65
bool constSpecifier() const
Definition arguments.h:111
bool volatileSpecifier() const
Definition arguments.h:112
DString mid(size_t index, size_t len=npos) const
Definition dstring.h:323
char & at(size_t i)
Returns a reference to the character at index i.
Definition dstring.h:675
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition dstring.h:342
virtual int getEndBodyLine() const =0
virtual DString inbodyDocumentation() const =0
virtual const FileDef * getBodyDef() const =0
virtual const MemberVector & getReferencedByMembers() const =0
virtual int getStartBodyLine() const =0
virtual const MemberVector & getReferencesMembers() const =0
virtual bool isInitonly() const =0
virtual bool isAssign() const =0
virtual bool isExplicit() const =0
virtual bool isNew() const =0
virtual bool isMaybeVoid() const =0
virtual DString argsString() const =0
virtual bool isSealed() const =0
virtual DString definition() const =0
virtual const DString & initializer() const =0
virtual bool isSettable() const =0
virtual bool isRetain() const =0
virtual bool isAddable() const =0
virtual bool isInline() const =0
virtual DString getReadAccessor() const =0
virtual const ArgumentList & argumentList() const =0
virtual bool isWritable() const =0
virtual bool isMaybeAmbiguous() const =0
virtual bool isPrivateGettable() const =0
virtual bool isRequired() const =0
virtual bool isAttribute() const =0
virtual bool isExternal() const =0
virtual bool isCopy() const =0
virtual DString bitfieldString() const =0
virtual bool isStatic() const =0
virtual const MemberDef * reimplements() const =0
virtual bool isMaybeDefault() const =0
virtual bool isPrivateSettable() const =0
virtual bool isRaisable() const =0
virtual bool isRemovable() const =0
virtual bool isConstrained() const =0
virtual DString getWriteAccessor() const =0
virtual bool isReadonly() const =0
virtual bool isBound() const =0
virtual bool isThreadLocal() const =0
virtual DString getScopeString() const =0
virtual bool isProtectedSettable() const =0
virtual bool isProtectedGettable() const =0
virtual bool hasOneLineInitializer() const =0
virtual bool isTransient() const =0
virtual bool hasMultiLineInitializer() const =0
virtual bool isOptional() const =0
virtual bool isGettable() const =0
virtual bool isReadable() const =0
virtual bool isWeak() const =0
virtual bool isStrong() const =0
virtual DString typeString() const =0
virtual bool isFinal() const =0
virtual DString memberTypeName() const =0
virtual bool isMutable() const =0
virtual bool isProperty() const =0
TextGeneratorSqlite3Impl(StringVector &l)
std::vector< std::string > StringVector
Definition containers.h:33
SqlStmt memberdef_insert
static bool memberdefExists(struct Refid refid)
static bool insertMemberReference(struct Refid src_refid, struct Refid dst_refid, const char *context)
static void stripQualifiers(DString &typeStr)
static bool memberdefIncomplete(struct Refid refid, const MemberDef *md)
static void insertMemberFunctionParams(int memberdef_id, const MemberDef *md, const Definition *def)
SqlStmt reimplements_insert
static void insertMemberDefineParams(int memberdef_id, const MemberDef *md, const Definition *def)
SqlStmt memberdef_update_def
SqlStmt memberdef_update_decl
static void writeMemberTemplateLists(const MemberDef *md)
LinkifyTextOptions & setScope(const Definition *scope)
Definition util.h:111
LinkifyTextOptions & setSelf(const Definition *self)
Definition util.h:117
LinkifyTextOptions & setFileScope(const FileDef *fileScope)
Definition util.h:114
void linkifyText(const TextGeneratorIntf &out, const DString &text, const LinkifyTextOptions &options)
Definition util.cpp:898

References FileDef::absFilePath(), Definition::anchor(), MemberDef::argsString(), MemberDef::argumentList(), associateMember(), DString::at(), bindIntParameter(), bindTextParameter(), MemberDef::bitfieldString(), Definition::briefDescription(), ArgumentList::constSpecifier(), DBG_CTX, MemberDef::definition(), Definition::documentation(), DString::empty(), generateSqlite3ForMember(), Definition::getBodyDef(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), Definition::getEndBodyLine(), Definition::getOutputFileBase(), MemberDef::getReadAccessor(), Definition::getReferencedByMembers(), Definition::getReferencesMembers(), MemberDef::getScopeString(), getSQLDesc(), Definition::getStartBodyLine(), MemberDef::getWriteAccessor(), MemberDef::hasMultiLineInitializer(), MemberDef::hasOneLineInitializer(), Definition::inbodyDocumentation(), MemberDef::initializer(), insertMemberDefineParams(), insertMemberFunctionParams(), insertMemberReference(), insertPath(), insertRefid(), MemberDef::isAddable(), MemberDef::isAssign(), MemberDef::isAttribute(), MemberDef::isBound(), MemberDef::isConstrained(), MemberDef::isCopy(), MemberDef::isExplicit(), MemberDef::isExternal(), MemberDef::isFinal(), MemberDef::isGettable(), Definition::isHidden(), MemberDef::isInitonly(), MemberDef::isInline(), MemberDef::isMaybeAmbiguous(), MemberDef::isMaybeDefault(), MemberDef::isMaybeVoid(), MemberDef::isMutable(), MemberDef::isNew(), MemberDef::isOptional(), MemberDef::isPrivateGettable(), MemberDef::isPrivateSettable(), MemberDef::isProperty(), MemberDef::isProtectedGettable(), MemberDef::isProtectedSettable(), MemberDef::isRaisable(), MemberDef::isReadable(), MemberDef::isReadonly(), Definition::isReference(), MemberDef::isRemovable(), MemberDef::isRequired(), MemberDef::isRetain(), MemberDef::isSealed(), MemberDef::isSettable(), MemberDef::isStatic(), MemberDef::isStrong(), MemberDef::isThreadLocal(), MemberDef::isTransient(), MemberDef::isWeak(), MemberDef::isWritable(), linkifyText(), memberdef_insert, memberdef_update_decl, memberdef_update_def, memberdefExists(), memberdefIncomplete(), MemberDef::memberType(), MemberDef::memberTypeName(), DString::mid(), Definition::name(), MemberDef::protection(), qPrint(), Refid::refid, MemberDef::reimplements(), reimplements_insert, Refid::rowid, LinkifyTextOptions::setFileScope(), LinkifyTextOptions::setScope(), LinkifyTextOptions::setSelf(), step(), SqlStmt::stmt, stripQualifiers(), DString::stripWhiteSpace(), TextGeneratorSqlite3Impl::TextGeneratorSqlite3Impl(), MemberDef::typeString(), MemberDef::virtualness(), ArgumentList::volatileSpecifier(), and writeMemberTemplateLists().

Referenced by generateSqlite3ForMember(), and generateSqlite3Section().

◆ generateSqlite3ForModule()

void generateSqlite3ForModule ( const ModuleDef * mod)
static

Definition at line 2078 of file sqlite3gen.cpp.

2079{
2080 // + contained class definitions
2081 // + contained concept definitions
2082 // + member groups
2083 // + normal members
2084 // + brief desc
2085 // + detailed desc
2086 // + location (file_id, line, column)
2087 // - exports
2088 // + used files
2089
2090 if (mod->isReference() || mod->isHidden()) return;
2091 struct Refid refid = insertRefid(mod->getOutputFileBase());
2092 if(!refid.created && compounddefExists(refid)){return;}
2093 bindIntParameter(compounddef_insert,":rowid", refid.rowid);
2095 bindTextParameter(compounddef_insert,":kind","module");
2096
2097 int file_id = insertPath(mod->getDefFileName());
2098 bindIntParameter(compounddef_insert,":file_id",file_id);
2101
2102 getSQLDescCompound(compounddef_insert,":briefdescription",mod->briefDescription(),mod);
2103 getSQLDescCompound(compounddef_insert,":detaileddescription",mod->documentation(),mod);
2104
2106
2107 // + contained class definitions
2109
2110 // + contained concept definitions
2112
2113 // + member groups
2114 for (const auto &mg : mod->getMemberGroups())
2115 {
2116 generateSqlite3Section(mod,&mg->members(),refid,"user-defined",mg->header(),
2117 mg->documentation());
2118 }
2119
2120 // + normal members
2121 for (const auto &ml : mod->getMemberLists())
2122 {
2123 if (ml->listType().isDeclaration())
2124 {
2125 generateSqlite3Section(mod,ml.get(),refid,"user-defined");
2126 }
2127 }
2128
2129 // + files
2131}
virtual const MemberGroupList & getMemberGroups() const =0
virtual const MemberLists & getMemberLists() const =0
virtual FileList getUsedFiles() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const ClassLinkedRefMap & getClasses() const =0

References bindIntParameter(), bindTextParameter(), Definition::briefDescription(), compounddef_insert, compounddefExists(), Definition::documentation(), generateSqlite3ForModule(), generateSqlite3Section(), ModuleDef::getClasses(), ModuleDef::getConcepts(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), ModuleDef::getMemberGroups(), ModuleDef::getMemberLists(), Definition::getOutputFileBase(), getSQLDescCompound(), ModuleDef::getUsedFiles(), insertPath(), insertRefid(), MemberListType::isDeclaration(), Definition::isHidden(), Definition::isReference(), MemberList::listType(), Definition::name(), Refid::refid, step(), writeInnerClasses(), writeInnerConcepts(), and writeInnerFiles().

Referenced by generateSqlite3(), and generateSqlite3ForModule().

◆ generateSqlite3ForNamespace()

void generateSqlite3ForNamespace ( const NamespaceDef * nd)
static

Definition at line 2134 of file sqlite3gen.cpp.

2135{
2136 // + contained class definitions
2137 // + contained namespace definitions
2138 // + member groups
2139 // + normal members
2140 // + brief desc
2141 // + detailed desc
2142 // + location (file_id, line, column)
2143 // - files containing (parts of) the namespace definition
2144
2145 if (nd->isReference() || nd->isHidden()) return; // skip external references
2146 struct Refid refid = insertRefid(nd->getOutputFileBase());
2147 if(!refid.created && compounddefExists(refid)){return;}
2148 bindIntParameter(compounddef_insert,":rowid", refid.rowid);
2149
2152 bindTextParameter(compounddef_insert,":kind","namespace");
2153
2154 int file_id = insertPath(nd->getDefFileName());
2155 bindIntParameter(compounddef_insert,":file_id",file_id);
2158
2159 getSQLDescCompound(compounddef_insert,":briefdescription",nd->briefDescription(),nd);
2160 getSQLDescCompound(compounddef_insert,":detaileddescription",nd->documentation(),nd);
2161
2163
2164 // + contained class definitions
2166
2167 // + contained concept definitions
2169
2170 // + contained namespace definitions
2172
2173 // + member groups
2174 for (const auto &mg : nd->getMemberGroups())
2175 {
2176 generateSqlite3Section(nd,&mg->members(),refid,"user-defined",mg->header(),
2177 mg->documentation());
2178 }
2179
2180 // + normal members
2181 for (const auto &ml : nd->getMemberLists())
2182 {
2183 if (ml->listType().isDeclaration())
2184 {
2185 generateSqlite3Section(nd,ml.get(),refid,"user-defined");
2186 }
2187 }
2188}
virtual ConceptLinkedRefMap getConcepts() const =0
virtual const MemberLists & getMemberLists() const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual DString title() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual const MemberGroupList & getMemberGroups() const =0

References bindIntParameter(), bindTextParameter(), Definition::briefDescription(), compounddef_insert, compounddefExists(), Definition::documentation(), generateSqlite3ForNamespace(), generateSqlite3Section(), NamespaceDef::getClasses(), NamespaceDef::getConcepts(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), NamespaceDef::getMemberGroups(), NamespaceDef::getMemberLists(), NamespaceDef::getNamespaces(), Definition::getOutputFileBase(), getSQLDescCompound(), insertPath(), insertRefid(), MemberListType::isDeclaration(), Definition::isHidden(), Definition::isReference(), MemberList::listType(), Definition::name(), Refid::refid, step(), NamespaceDef::title(), writeInnerClasses(), writeInnerConcepts(), and writeInnerNamespaces().

Referenced by generateSqlite3(), and generateSqlite3ForNamespace().

◆ generateSqlite3ForPage()

void generateSqlite3ForPage ( const PageDef * pd,
bool isExample )
static

Definition at line 2460 of file sqlite3gen.cpp.

2461{
2462 // + name
2463 // + title
2464 // + brief description
2465 // + documentation (detailed description)
2466 // + inbody documentation
2467 // + sub pages
2468 if (pd->isReference()) return; // skip external references.
2469
2470 // TODO: do we more special handling if isExample?
2471
2472 DString qrefid = pd->getOutputFileBase();
2473 if (pd->getGroupDef())
2474 {
2475 qrefid+="_"+pd->name();
2476 }
2477 if (qrefid=="index") qrefid="indexpage"; // to prevent overwriting the generated index page.
2478
2479 struct Refid refid = insertRefid(qrefid);
2480
2481 // can omit a page that already has a refid
2482 if(!refid.created && compounddefExists(refid)){return;}
2483
2485 // + name
2487
2488 DString title;
2489 if (pd==Doxygen::mainPage.get()) // main page is special
2490 {
2491 if (mainPageHasTitle())
2492 {
2494 }
2495 else
2496 {
2497 title = Config_getString(PROJECT_NAME);
2498 }
2499 }
2500 else
2501 {
2503 if (si)
2504 {
2505 title = si->title();
2506 }
2507 if (title.empty())
2508 {
2509 title = pd->title();
2510 }
2511 }
2512
2513 // + title
2514 bindTextParameter(compounddef_insert,":title",title);
2515
2516 bindTextParameter(compounddef_insert,":kind", isExample ? "example" : "page");
2517
2518 int file_id = insertPath(pd->getDefFileName());
2519
2520 bindIntParameter(compounddef_insert,":file_id",file_id);
2523
2524 // + brief description
2525 getSQLDesc(compounddef_insert,":briefdescription",pd->briefDescription(),pd);
2526 // + documentation (detailed description)
2527 getSQLDesc(compounddef_insert,":detaileddescription",pd->documentation(),pd);
2528
2530 // + sub pages
2532}
const T * find(const std::string &key) const
Definition linkedmap.h:47
virtual const PageLinkedRefMap & getSubPages() const =0
virtual DString title() const =0
virtual const GroupDef * getGroupDef() const =0
class that provide information about a section.
Definition section.h:58
DString title() const
Definition section.h:70
static SectionManager & instance()
returns a reference to the singleton
Definition section.h:179
#define Config_getString(name)
Definition config.h:32
bool mainPageHasTitle()
Definition util.cpp:6328
DString filterTitle(const DString &title)
Definition util.cpp:5676
DString convertCharEntitiesToUTF8(const DString &str)
Definition util.cpp:4095

References bindIntParameter(), bindTextParameter(), Definition::briefDescription(), compounddef_insert, compounddefExists(), Config_getString, convertCharEntitiesToUTF8(), Definition::documentation(), DString::empty(), filterTitle(), LinkedMap< T, Hash, KeyEqual, Map >::find(), generateSqlite3ForPage(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), PageDef::getGroupDef(), Definition::getOutputFileBase(), getSQLDesc(), PageDef::getSubPages(), insertPath(), insertRefid(), SectionManager::instance(), Definition::isReference(), Doxygen::mainPage, mainPageHasTitle(), Definition::name(), Refid::refid, step(), PageDef::title(), SectionInfo::title(), and writeInnerPages().

Referenced by generateSqlite3(), and generateSqlite3ForPage().

◆ generateSqlite3Section()

void generateSqlite3Section ( const Definition * d,
const MemberList * ml,
struct Refid scope_refid,
const char * ,
const DString & = DString(),
const DString & = DString() )
static

Definition at line 1870 of file sqlite3gen.cpp.

1876{
1877 if (ml==nullptr) return;
1878 for (const auto &md : *ml)
1879 {
1880 // TODO: necessary? just tracking what xmlgen does; xmlgen says:
1881 // namespace members are also inserted in the file scope, but
1882 // to prevent this duplication in the XML output, we filter those here.
1883 if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==nullptr)
1884 {
1885 generateSqlite3ForMember(md, scope_refid, d);
1886 }
1887 }
1888}
virtual DefType definitionType() const =0
static void generateSqlite3ForMember(const MemberDef *md, struct Refid scope_refid, const Definition *def)

References Definition::definitionType(), generateSqlite3ForMember(), generateSqlite3Section(), and Definition::TypeFile.

Referenced by generateSqlite3ForClass(), generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForModule(), generateSqlite3ForNamespace(), and generateSqlite3Section().

◆ getSQLDesc()

void getSQLDesc ( SqlStmt & s,
const char * col,
const DString & value,
const Definition * def )
static

Definition at line 1448 of file sqlite3gen.cpp.

1449{
1451 s,
1452 col,
1454 def->getOuterScope(),
1455 def,
1456 value,
1457 def->docFile(),
1458 def->docLine()
1459 )
1460 );
1461}
virtual int docLine() const =0
virtual Definition * getOuterScope() const =0
virtual DString docFile() const =0
DString getSQLDocBlock(const Definition *scope, const Definition *def, const DString &doc, const DString &fileName, int lineNr)

References bindTextParameter(), Definition::docFile(), Definition::docLine(), Definition::getOuterScope(), getSQLDesc(), and getSQLDocBlock().

Referenced by generateSqlite3ForDir(), generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForMember(), generateSqlite3ForPage(), and getSQLDesc().

◆ getSQLDescCompound()

void getSQLDescCompound ( SqlStmt & s,
const char * col,
const DString & value,
const Definition * def )
static

Definition at line 1463 of file sqlite3gen.cpp.

1464{
1466 s,
1467 col,
1469 def,
1470 def,
1471 value,
1472 def->docFile(),
1473 def->docLine()
1474 )
1475 );
1476}

References bindTextParameter(), Definition::docFile(), Definition::docLine(), getSQLDescCompound(), and getSQLDocBlock().

Referenced by generateSqlite3ForClass(), generateSqlite3ForConcept(), generateSqlite3ForModule(), generateSqlite3ForNamespace(), and getSQLDescCompound().

◆ getSQLDocBlock()

DString getSQLDocBlock ( const Definition * scope,
const Definition * def,
const DString & doc,
const DString & fileName,
int lineNr )

Definition at line 1417 of file sqlite3gen.cpp.

1422{
1423 if (doc.empty()) return "";
1424
1425 TextStream t;
1426 auto parser { createDocParser() };
1427 auto ast { validatingParseDoc(*parser.get(),
1428 fileName,
1429 lineNr,
1430 scope,
1431 toMemberDef(def),
1432 doc,
1433 DocOptions())
1434 };
1435 auto astImpl = dynamic_cast<const DocNodeAST*>(ast.get());
1436 if (astImpl)
1437 {
1438 OutputCodeList xmlCodeList;
1439 xmlCodeList.add<XMLCodeGenerator>(&t);
1440 // create a parse tree visitor for XML
1441 XmlDocVisitor visitor(t,xmlCodeList,
1442 scope ? scope->getDefFileExtension() : DString(""));
1443 std::visit(visitor,astImpl->root);
1444 }
1445 return convertCharEntitiesToUTF8(t.str());
1446}
virtual DString getDefFileExtension() const =0
Class representing the abstract syntax tree of a documentation block.
Definition docnode.h:1471
Class representing a list of different code generators.
Definition outputlist.h:165
void add(OutputCodeIntfPtr &&p)
Definition outputlist.h:195
Text streaming class that buffers data.
Definition textstream.h:36
std::string str() const
Return the contents of the buffer as a std::string object.
Definition textstream.h:232
Concrete visitor implementation for XML output.
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:55
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &input, const DocOptions &options)
MemberDef * toMemberDef(Definition *d)

References OutputCodeList::add(), convertCharEntitiesToUTF8(), createDocParser(), DString::empty(), Definition::getDefFileExtension(), getSQLDocBlock(), TextStream::str(), toMemberDef(), and validatingParseDoc().

Referenced by getSQLDesc(), getSQLDescCompound(), and getSQLDocBlock().

◆ initializeTables()

int initializeTables ( sqlite3 * db)
static

Definition at line 1219 of file sqlite3gen.cpp.

1220{
1221 msg("Initializing DB schema (tables)...\n");
1222 for (unsigned int k = 0; k < sizeof(table_schema) / sizeof(table_schema[0]); k++)
1223 {
1224 const char *q = table_schema[k][1];
1225 char *errmsg = nullptr;
1226 int rc = sqlite3_exec(db, q, nullptr, nullptr, &errmsg);
1227 if (rc != SQLITE_OK)
1228 {
1229 err("failed to execute query: {}\n\t{}\n", q, errmsg);
1230 return -1;
1231 }
1232 }
1233 return 0;
1234}
const char * table_schema[][2]

References err, initializeTables(), msg, and table_schema.

Referenced by generateSqlite3(), and initializeTables().

◆ initializeViews()

int initializeViews ( sqlite3 * db)
static

Definition at line 1236 of file sqlite3gen.cpp.

1237{
1238 msg("Initializing DB schema (views)...\n");
1239 for (unsigned int k = 0; k < sizeof(view_schema) / sizeof(view_schema[0]); k++)
1240 {
1241 const char *q = view_schema[k][1];
1242 char *errmsg = nullptr;
1243 int rc = sqlite3_exec(db, q, nullptr, nullptr, &errmsg);
1244 if (rc != SQLITE_OK)
1245 {
1246 err("failed to execute query: {}\n\t{}\n", q, errmsg);
1247 return -1;
1248 }
1249 }
1250 return 0;
1251}
const char * view_schema[][2]

References err, initializeViews(), msg, and view_schema.

Referenced by generateSqlite3(), and initializeViews().

◆ insertMemberDefineParams()

void insertMemberDefineParams ( int memberdef_id,
const MemberDef * md,
const Definition * def )
static

Definition at line 1102 of file sqlite3gen.cpp.

1103{
1104 if (md->argumentList().empty()) // special case for "foo()" to
1105 // distinguish it from "foo".
1106 {
1107 DBG_CTX(("no params\n"));
1108 }
1109 else
1110 {
1111 for (const Argument &a : md->argumentList())
1112 {
1113 bindTextParameter(param_insert,":defname",a.type);
1114 int param_id=step(param_insert,true);
1115 if (param_id==-1) {
1116 continue;
1117 }
1118
1119 bindIntParameter(memberdef_param_insert,":memberdef_id",memberdef_id);
1120 bindIntParameter(memberdef_param_insert,":param_id",param_id);
1122 }
1123 }
1124}
bool empty() const
Definition arguments.h:99
SqlStmt memberdef_param_insert
SqlStmt param_insert
This class contains the information about the argument of a function or template.
Definition arguments.h:27

References MemberDef::argumentList(), bindIntParameter(), bindTextParameter(), DBG_CTX, ArgumentList::empty(), insertMemberDefineParams(), memberdef_param_insert, param_insert, and step().

Referenced by generateSqlite3ForMember(), and insertMemberDefineParams().

◆ insertMemberFunctionParams()

void insertMemberFunctionParams ( int memberdef_id,
const MemberDef * md,
const Definition * def )
static

Definition at line 1024 of file sqlite3gen.cpp.

1025{
1026 LinkifyTextOptions options;
1027 options.setScope(def).setFileScope(md->getBodyDef()).setSelf(md);
1028 const ArgumentList &declAl = md->declArgumentList();
1029 const ArgumentList &defAl = md->argumentList();
1030 if (declAl.size()>0)
1031 {
1032 auto defIt = defAl.begin();
1033 for (const Argument &a : declAl)
1034 {
1035 //const Argument *defArg = defAli.current();
1036 const Argument *defArg = nullptr;
1037 if (defIt!=defAl.end())
1038 {
1039 defArg = &(*defIt);
1040 ++defIt;
1041 }
1042
1043 if (!a.attrib.empty())
1044 {
1045 bindTextParameter(param_select,":attributes",a.attrib);
1046 bindTextParameter(param_insert,":attributes",a.attrib);
1047 }
1048 if (!a.type.empty())
1049 {
1050 StringVector list;
1051 linkifyText(TextGeneratorSqlite3Impl(list),a.type,options);
1052
1053 for (const auto &s : list)
1054 {
1055 DString qsrc_refid = md->getOutputFileBase() + "_1" + md->anchor();
1056 struct Refid src_refid = insertRefid(qsrc_refid);
1057 struct Refid dst_refid = insertRefid(s);
1058 insertMemberReference(src_refid,dst_refid, "argument");
1059 }
1060 bindTextParameter(param_select,":type",a.type);
1061 bindTextParameter(param_insert,":type",a.type);
1062 }
1063 if (!a.name.empty())
1064 {
1065 bindTextParameter(param_select,":declname",a.name);
1066 bindTextParameter(param_insert,":declname",a.name);
1067 }
1068 if (defArg && !defArg->name.empty() && defArg->name!=a.name)
1069 {
1070 bindTextParameter(param_select,":defname",defArg->name);
1071 bindTextParameter(param_insert,":defname",defArg->name);
1072 }
1073 if (!a.array.empty())
1074 {
1075 bindTextParameter(param_select,":array",a.array);
1076 bindTextParameter(param_insert,":array",a.array);
1077 }
1078 if (!a.defval.empty())
1079 {
1080 StringVector list;
1081 linkifyText(TextGeneratorSqlite3Impl(list),a.defval,options);
1082 bindTextParameter(param_select,":defval",a.defval);
1083 bindTextParameter(param_insert,":defval",a.defval);
1084 }
1085
1086 int param_id=step(param_select,true,true);
1087 if (param_id==0) {
1088 param_id=step(param_insert,true);
1089 }
1090 if (param_id==-1) {
1091 DBG_CTX(("error INSERT params failed\n"));
1092 continue;
1093 }
1094
1095 bindIntParameter(memberdef_param_insert,":memberdef_id",memberdef_id);
1096 bindIntParameter(memberdef_param_insert,":param_id",param_id);
1098 }
1099 }
1100}
iterator end()
Definition arguments.h:94
size_t size() const
Definition arguments.h:100
iterator begin()
Definition arguments.h:93
virtual const ArgumentList & declArgumentList() const =0
SqlStmt param_select
DString name
Definition arguments.h:44

References Definition::anchor(), MemberDef::argumentList(), ArgumentList::begin(), bindIntParameter(), bindTextParameter(), DBG_CTX, MemberDef::declArgumentList(), DString::empty(), ArgumentList::end(), Definition::getBodyDef(), Definition::getOutputFileBase(), insertMemberFunctionParams(), insertMemberReference(), insertRefid(), linkifyText(), memberdef_param_insert, Argument::name, param_insert, param_select, LinkifyTextOptions::setFileScope(), LinkifyTextOptions::setScope(), LinkifyTextOptions::setSelf(), ArgumentList::size(), step(), and TextGeneratorSqlite3Impl::TextGeneratorSqlite3Impl().

Referenced by generateSqlite3ForMember(), and insertMemberFunctionParams().

◆ insertMemberReference() [1/2]

void insertMemberReference ( const MemberDef * src,
const MemberDef * dst,
const char * context )
static

Definition at line 1014 of file sqlite3gen.cpp.

1015{
1016 DString qdst_refid = dst->getOutputFileBase() + "_1" + dst->anchor();
1017 DString qsrc_refid = src->getOutputFileBase() + "_1" + src->anchor();
1018
1019 struct Refid src_refid = insertRefid(qsrc_refid);
1020 struct Refid dst_refid = insertRefid(qdst_refid);
1021 insertMemberReference(src_refid,dst_refid,context);
1022}

References Definition::anchor(), Definition::getOutputFileBase(), insertMemberReference(), and insertRefid().

◆ insertMemberReference() [2/2]

bool insertMemberReference ( struct Refid src_refid,
struct Refid dst_refid,
const char * context )
static

Definition at line 993 of file sqlite3gen.cpp.

994{
995 if (src_refid.rowid==-1||dst_refid.rowid==-1)
996 return false;
997
998 if (
999 !bindIntParameter(xrefs_insert,":src_rowid",src_refid.rowid) ||
1000 !bindIntParameter(xrefs_insert,":dst_rowid",dst_refid.rowid)
1001 )
1002 {
1003 return false;
1004 }
1005 else
1006 {
1007 bindTextParameter(xrefs_insert,":context",context);
1008 }
1009
1011 return true;
1012}
SqlStmt xrefs_insert

References bindIntParameter(), bindTextParameter(), insertMemberReference(), Refid::rowid, step(), and xrefs_insert.

Referenced by generateSqlite3ForMember(), insertMemberFunctionParams(), insertMemberReference(), and insertMemberReference().

◆ insertPath()

int insertPath ( DString name,
bool local = true,
bool found = true,
int type = 1 )
static

Definition at line 913 of file sqlite3gen.cpp.

914{
915 int rowid=-1;
916 if (name==nullptr) return rowid;
917
918 name = stripFromPath(name);
919
920 bindTextParameter(path_select,":name",name.data());
921 rowid=step(path_select,true,true);
922 if (rowid==0)
923 {
924 bindTextParameter(path_insert,":name",name.data());
925 bindIntParameter(path_insert,":type",type);
926 bindIntParameter(path_insert,":local",local?1:0);
927 bindIntParameter(path_insert,":found",found?1:0);
928 rowid=step(path_insert,true);
929 }
930 return rowid;
931}
SqlStmt path_insert
SqlStmt path_select
DString stripFromPath(const DString &path)
Definition util.cpp:326

References bindIntParameter(), bindTextParameter(), DString::data(), insertPath(), path_insert, path_select, step(), and stripFromPath().

Referenced by generateSqlite3ForClass(), generateSqlite3ForConcept(), generateSqlite3ForDir(), generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForMember(), generateSqlite3ForModule(), generateSqlite3ForNamespace(), generateSqlite3ForPage(), and insertPath().

◆ insertRefid()

◆ memberdefExists()

bool memberdefExists ( struct Refid refid)
static

Definition at line 971 of file sqlite3gen.cpp.

972{
974 int test = step(memberdef_exists,true,true);
975 return test ? true : false;
976}
SqlStmt memberdef_exists

References bindIntParameter(), memberdef_exists, memberdefExists(), Refid::refid, and step().

Referenced by generateSqlite3ForMember(), and memberdefExists().

◆ memberdefIncomplete()

bool memberdefIncomplete ( struct Refid refid,
const MemberDef * md )
static

Definition at line 978 of file sqlite3gen.cpp.

979{
982 int test = step(memberdef_incomplete,true,true);
983 return test ? true : false;
984}
SqlStmt memberdef_incomplete

References bindIntParameter(), MemberDef::isInline(), memberdef_incomplete, memberdefIncomplete(), Refid::refid, and step().

Referenced by generateSqlite3ForMember(), and memberdefIncomplete().

◆ openDbConnection()

sqlite3 * openDbConnection ( )
static

Definition at line 2535 of file sqlite3gen.cpp.

2536{
2537
2538 DString outputDirectory = Config_getString(SQLITE3_OUTPUT);
2539 sqlite3 *db = nullptr;
2540
2541 int rc = sqlite3_initialize();
2542 if (rc != SQLITE_OK)
2543 {
2544 err("sqlite3_initialize failed\n");
2545 return nullptr;
2546 }
2547
2548 std::string dbFileName = "doxygen_sqlite3.db";
2549 FileInfo fi(outputDirectory.str()+"/"+dbFileName);
2550
2551 if (fi.exists())
2552 {
2553 if (Config_getBool(SQLITE3_RECREATE_DB))
2554 {
2555 Dir().remove(fi.absFilePath());
2556 }
2557 else
2558 {
2559 err("doxygen_sqlite3.db already exists! Rename, remove, or archive it to regenerate\n");
2560 return nullptr;
2561 }
2562 }
2563
2564 rc = sqlite3_open_v2(
2565 fi.absFilePath().c_str(),
2566 &db,
2567 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
2568 nullptr
2569 );
2570 if (rc != SQLITE_OK)
2571 {
2572 sqlite3_close(db);
2573 err("Database open failed: doxygen_sqlite3.db\n");
2574 }
2575 return db;
2576}
const std::string & str() const
Definition dstring.h:634
Dir()
Definition dir.cpp:189
Minimal replacement for QFileInfo.
Definition fileinfo.h:23
#define Config_getBool(name)
Definition config.h:33

References FileInfo::absFilePath(), Config_getBool, Config_getString, Dir::Dir(), err, FileInfo::exists(), openDbConnection(), and DString::str().

Referenced by generateSqlite3(), and openDbConnection().

◆ pragmaTuning()

void pragmaTuning ( sqlite3 * db)
static

Definition at line 1211 of file sqlite3gen.cpp.

1212{
1213 char * sErrMsg = nullptr;
1214 sqlite3_exec(db, "PRAGMA synchronous = OFF", nullptr, nullptr, &sErrMsg);
1215 sqlite3_exec(db, "PRAGMA journal_mode = MEMORY", nullptr, nullptr, &sErrMsg);
1216 sqlite3_exec(db, "PRAGMA temp_store = MEMORY;", nullptr, nullptr, &sErrMsg);
1217}

References pragmaTuning().

Referenced by generateSqlite3(), and pragmaTuning().

◆ prepareStatement()

int prepareStatement ( sqlite3 * db,
SqlStmt & s )
static

Definition at line 1154 of file sqlite3gen.cpp.

1155{
1156 int rc = sqlite3_prepare_v2(db,s.query,-1,&s.stmt,nullptr);
1157 if (rc!=SQLITE_OK)
1158 {
1159 err("prepare failed for:\n {}\n {}\n", s.query, sqlite3_errmsg(db));
1160 s.db = nullptr;
1161 return -1;
1162 }
1163 s.db = db;
1164 return rc;
1165}

References SqlStmt::db, err, prepareStatement(), SqlStmt::query, and SqlStmt::stmt.

Referenced by prepareStatement(), and prepareStatements().

◆ prepareStatements()

int prepareStatements ( sqlite3 * db)
static

Definition at line 1167 of file sqlite3gen.cpp.

1168{
1169 if (
1170 -1==prepareStatement(db, meta_insert) ||
1177 -1==prepareStatement(db, path_insert) ||
1178 -1==prepareStatement(db, path_select) ||
1179 -1==prepareStatement(db, refid_insert) ||
1180 -1==prepareStatement(db, refid_select) ||
1181 -1==prepareStatement(db, incl_insert)||
1182 -1==prepareStatement(db, incl_select)||
1183 -1==prepareStatement(db, param_insert) ||
1184 -1==prepareStatement(db, param_select) ||
1185 -1==prepareStatement(db, xrefs_insert) ||
1192 )
1193 {
1194 return -1;
1195 }
1196 return 0;
1197}
static int prepareStatement(sqlite3 *db, SqlStmt &s)
SqlStmt contains_insert
SqlStmt meta_insert

References compounddef_exists, compounddef_insert, compoundref_insert, contains_insert, incl_insert, incl_select, member_insert, memberdef_exists, memberdef_incomplete, memberdef_insert, memberdef_param_insert, memberdef_update_decl, memberdef_update_def, meta_insert, param_insert, param_select, path_insert, path_select, prepareStatement(), prepareStatements(), refid_insert, refid_select, reimplements_insert, and xrefs_insert.

Referenced by generateSqlite3(), and prepareStatements().

◆ recordMetadata()

void recordMetadata ( )
static

Definition at line 933 of file sqlite3gen.cpp.

934{
935 bindTextParameter(meta_insert,":doxygen_version",getFullVersion());
936 bindTextParameter(meta_insert,":schema_version","0.2.1"); //TODO: this should be a constant somewhere; not sure where
939 bindTextParameter(meta_insert,":project_name",Config_getString(PROJECT_NAME));
940 bindTextParameter(meta_insert,":project_number",Config_getString(PROJECT_NUMBER));
941 bindTextParameter(meta_insert,":project_brief",Config_getString(PROJECT_BRIEF));
943}
DString dateToString(DateTimeType includeTime)
Returns the current date, when includeTime is set also the time is provided.
Definition datetime.cpp:62

References bindTextParameter(), Config_getString, Date, DateTime, dateToString(), meta_insert, recordMetadata(), and step().

Referenced by generateSqlite3(), and recordMetadata().

◆ step()

int step ( SqlStmt & s,
bool getRowId = false,
bool select = false )
static

Definition at line 895 of file sqlite3gen.cpp.

896{
897 int rowid=-1;
898 int rc = sqlite3_step(s.stmt);
899 if (rc!=SQLITE_DONE && rc!=SQLITE_ROW)
900 {
901 DBG_CTX(("sqlite3_step: %s (rc: %d)\n", sqlite3_errmsg(s.db), rc));
902 sqlite3_reset(s.stmt);
903 sqlite3_clear_bindings(s.stmt);
904 return -1;
905 }
906 if (getRowId && select) rowid = sqlite3_column_int(s.stmt, 0); // works on selects, doesn't on inserts
907 if (getRowId && !select) rowid = static_cast<int>(sqlite3_last_insert_rowid(s.db)); //works on inserts, doesn't on selects
908 sqlite3_reset(s.stmt);
909 sqlite3_clear_bindings(s.stmt); // XXX When should this really be called
910 return rowid;
911}

References SqlStmt::db, DBG_CTX, step(), and SqlStmt::stmt.

Referenced by associateMember(), compounddefExists(), generateSqlite3ForClass(), generateSqlite3ForConcept(), generateSqlite3ForDir(), generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForMember(), generateSqlite3ForModule(), generateSqlite3ForNamespace(), generateSqlite3ForPage(), insertMemberDefineParams(), insertMemberFunctionParams(), insertMemberReference(), insertPath(), insertRefid(), memberdefExists(), memberdefIncomplete(), recordMetadata(), step(), writeInnerClasses(), writeInnerConcepts(), writeInnerDirs(), writeInnerFiles(), writeInnerGroups(), writeInnerModules(), writeInnerNamespaces(), writeInnerPages(), and writeTemplateArgumentList().

◆ stripQualifiers()

void stripQualifiers ( DString & typeStr)
static

Definition at line 1142 of file sqlite3gen.cpp.

1143{
1144 bool done=false;
1145 while (!done)
1146 {
1147 if (typeStr.stripPrefix("static "));
1148 else if (typeStr.stripPrefix("virtual "));
1149 else if (typeStr=="virtual") typeStr="";
1150 else done=true;
1151 }
1152}

References DString::stripPrefix(), and stripQualifiers().

Referenced by generateSqlite3ForMember(), generateXMLForMember(), stripQualifiers(), and stripQualifiers().

◆ writeInnerClasses()

void writeInnerClasses ( const ClassLinkedRefMap & cl,
struct Refid outer_refid )
static

Definition at line 1266 of file sqlite3gen.cpp.

1267{
1268 for (const auto &cd : cl)
1269 {
1270 if (!cd->isHidden() && !cd->isAnonymous())
1271 {
1272 struct Refid inner_refid = insertRefid(cd->getOutputFileBase());
1273
1274 bindIntParameter(contains_insert,":inner_rowid", inner_refid.rowid);
1275 bindIntParameter(contains_insert,":outer_rowid", outer_refid.rowid);
1277 }
1278 }
1279}

References bindIntParameter(), contains_insert, insertRefid(), Refid::rowid, step(), and writeInnerClasses().

Referenced by generateSqlite3ForClass(), generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForModule(), generateSqlite3ForNamespace(), generateXMLForClass(), generateXMLForFile(), generateXMLForGroup(), generateXMLForModule(), generateXMLForNamespace(), writeInnerClasses(), and writeInnerClasses().

◆ writeInnerConcepts()

void writeInnerConcepts ( const ConceptLinkedRefMap & cl,
struct Refid outer_refid )
static

Definition at line 1281 of file sqlite3gen.cpp.

1282{
1283 for (const auto &cd : cl)
1284 {
1285 struct Refid inner_refid = insertRefid(cd->getOutputFileBase());
1286
1287 bindIntParameter(contains_insert,":inner_rowid", inner_refid.rowid);
1288 bindIntParameter(contains_insert,":outer_rowid", outer_refid.rowid);
1290 }
1291}

References bindIntParameter(), contains_insert, insertRefid(), Refid::rowid, step(), and writeInnerConcepts().

Referenced by generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForModule(), generateSqlite3ForNamespace(), generateXMLForFile(), generateXMLForGroup(), generateXMLForModule(), generateXMLForNamespace(), writeInnerConcepts(), and writeInnerConcepts().

◆ writeInnerDirs()

void writeInnerDirs ( const DirList & dl,
struct Refid outer_refid )
static

Definition at line 1344 of file sqlite3gen.cpp.

1345{
1346 for (const auto subdir : dl)
1347 {
1348 struct Refid inner_refid = insertRefid(subdir->getOutputFileBase());
1349
1350 bindIntParameter(contains_insert,":inner_rowid", inner_refid.rowid);
1351 bindIntParameter(contains_insert,":outer_rowid", outer_refid.rowid);
1353 }
1354}

References bindIntParameter(), contains_insert, insertRefid(), Refid::rowid, step(), and writeInnerDirs().

Referenced by generateSqlite3ForDir(), generateXMLForDir(), writeInnerDirs(), and writeInnerDirs().

◆ writeInnerFiles()

void writeInnerFiles ( const FileList & fl,
struct Refid outer_refid )
static

Definition at line 1332 of file sqlite3gen.cpp.

1333{
1334 for (const auto &fd: fl)
1335 {
1336 struct Refid inner_refid = insertRefid(fd->getOutputFileBase());
1337
1338 bindIntParameter(contains_insert,":inner_rowid", inner_refid.rowid);
1339 bindIntParameter(contains_insert,":outer_rowid", outer_refid.rowid);
1341 }
1342}

References bindIntParameter(), contains_insert, insertRefid(), Refid::rowid, step(), and writeInnerFiles().

Referenced by generateSqlite3ForDir(), generateSqlite3ForGroup(), generateSqlite3ForModule(), generateXMLForDir(), generateXMLForGroup(), generateXMLForModule(), writeInnerFiles(), and writeInnerFiles().

◆ writeInnerGroups()

void writeInnerGroups ( const GroupList & gl,
struct Refid outer_refid )
static

Definition at line 1320 of file sqlite3gen.cpp.

1321{
1322 for (const auto &sgd : gl)
1323 {
1324 struct Refid inner_refid = insertRefid(sgd->getOutputFileBase());
1325
1326 bindIntParameter(contains_insert,":inner_rowid", inner_refid.rowid);
1327 bindIntParameter(contains_insert,":outer_rowid", outer_refid.rowid);
1329 }
1330}

References bindIntParameter(), contains_insert, insertRefid(), Refid::rowid, step(), and writeInnerGroups().

Referenced by generateSqlite3ForGroup(), generateXMLForGroup(), writeInnerGroups(), and writeInnerGroups().

◆ writeInnerModules()

void writeInnerModules ( const ModuleLinkedRefMap & ml,
struct Refid outer_refid )
static

Definition at line 1293 of file sqlite3gen.cpp.

1294{
1295 for (const auto &mod : ml)
1296 {
1297 struct Refid inner_refid = insertRefid(mod->getOutputFileBase());
1298
1299 bindIntParameter(contains_insert,":inner_rowid", inner_refid.rowid);
1300 bindIntParameter(contains_insert,":outer_rowid", outer_refid.rowid);
1302 }
1303}

References bindIntParameter(), contains_insert, insertRefid(), Refid::rowid, step(), and writeInnerModules().

Referenced by generateSqlite3ForGroup(), generateXMLForGroup(), writeInnerModules(), and writeInnerModules().

◆ writeInnerNamespaces()

void writeInnerNamespaces ( const NamespaceLinkedRefMap & nl,
struct Refid outer_refid )
static

Definition at line 1356 of file sqlite3gen.cpp.

1357{
1358 for (const auto &nd : nl)
1359 {
1360 if (!nd->isHidden() && !nd->isAnonymous())
1361 {
1362 struct Refid inner_refid = insertRefid(nd->getOutputFileBase());
1363
1364 bindIntParameter(contains_insert,":inner_rowid",inner_refid.rowid);
1365 bindIntParameter(contains_insert,":outer_rowid",outer_refid.rowid);
1367 }
1368 }
1369}

References bindIntParameter(), contains_insert, insertRefid(), Refid::rowid, step(), and writeInnerNamespaces().

Referenced by generateSqlite3ForFile(), generateSqlite3ForGroup(), generateSqlite3ForNamespace(), generateXMLForFile(), generateXMLForGroup(), generateXMLForNamespace(), writeInnerNamespaces(), and writeInnerNamespaces().

◆ writeInnerPages()

void writeInnerPages ( const PageLinkedRefMap & pl,
struct Refid outer_refid )
static

Definition at line 1306 of file sqlite3gen.cpp.

1307{
1308 for (const auto &pd : pl)
1309 {
1310 struct Refid inner_refid = insertRefid(
1311 pd->getGroupDef() ? pd->getOutputFileBase()+"_"+pd->name() : pd->getOutputFileBase()
1312 );
1313
1314 bindIntParameter(contains_insert,":inner_rowid", inner_refid.rowid);
1315 bindIntParameter(contains_insert,":outer_rowid", outer_refid.rowid);
1317 }
1318}

References bindIntParameter(), contains_insert, insertRefid(), Refid::rowid, step(), and writeInnerPages().

Referenced by generateSqlite3ForGroup(), generateSqlite3ForPage(), generateXMLForGroup(), generateXMLForPage(), writeInnerPages(), and writeInnerPages().

◆ writeMemberTemplateLists()

void writeMemberTemplateLists ( const MemberDef * md)
static

Definition at line 1402 of file sqlite3gen.cpp.

1403{
1405}
virtual const ClassDef * getClassDef() const =0
virtual const ArgumentList & templateArguments() const =0
virtual const FileDef * getFileDef() const =0
static void writeTemplateArgumentList(const ArgumentList &al, const Definition *scope, const FileDef *fileScope)

References MemberDef::getClassDef(), MemberDef::getFileDef(), MemberDef::templateArguments(), writeMemberTemplateLists(), and writeTemplateArgumentList().

Referenced by generateSqlite3ForMember(), generateXMLForMember(), writeMemberTemplateLists(), and writeMemberTemplateLists().

◆ writeTemplateArgumentList()

void writeTemplateArgumentList ( const ArgumentList & al,
const Definition * scope,
const FileDef * fileScope )
static

Definition at line 1372 of file sqlite3gen.cpp.

1375{
1376 for (const Argument &a : al)
1377 {
1378 if (!a.type.empty())
1379 {
1380//#warning linkifyText(TextGeneratorXMLImpl(t),a.type,LinkifyTextOptions().setScope(scope).setFileScope(fileScope));
1381 bindTextParameter(param_select,":type",a.type);
1382 bindTextParameter(param_insert,":type",a.type);
1383 }
1384 if (!a.name.empty())
1385 {
1386 bindTextParameter(param_select,":declname",a.name);
1387 bindTextParameter(param_insert,":declname",a.name);
1388 bindTextParameter(param_select,":defname",a.name);
1389 bindTextParameter(param_insert,":defname",a.name);
1390 }
1391 if (!a.defval.empty())
1392 {
1393//#warning linkifyText(TextGeneratorXMLImpl(t),a.defval,LinkifyTextOptions().setScope(scope).setFileScope(fileScope));
1394 bindTextParameter(param_select,":defval",a.defval);
1395 bindTextParameter(param_insert,":defval",a.defval);
1396 }
1397 if (!step(param_select,true,true))
1399 }
1400}

References bindTextParameter(), param_insert, param_select, step(), and writeTemplateArgumentList().

Referenced by writeMemberTemplateLists(), writeMemberTemplateLists(), writeTemplateArgumentList(), writeTemplateArgumentList(), writeTemplateList(), writeTemplateList(), writeTemplateList(), and writeTemplateList().

◆ writeTemplateList() [1/2]

void writeTemplateList ( const ClassDef * cd)
static

Definition at line 1407 of file sqlite3gen.cpp.

1408{
1410}
virtual const ArgumentList & templateArguments() const =0
Returns the template arguments of this class.
virtual FileDef * getFileDef() const =0
Returns the namespace this compound is in, or 0 if it has a global scope.

References ClassDef::getFileDef(), ClassDef::templateArguments(), writeTemplateArgumentList(), and writeTemplateList().

Referenced by generateSqlite3ForClass(), generateSqlite3ForConcept(), generateXMLForClass(), generateXMLForConcept(), writeTemplateList(), writeTemplateList(), writeTemplateList(), and writeTemplateList().

◆ writeTemplateList() [2/2]

void writeTemplateList ( const ConceptDef * cd)
static

Definition at line 1412 of file sqlite3gen.cpp.

1413{
1415}
virtual ArgumentList getTemplateParameterList() const =0
virtual const FileDef * getFileDef() const =0

References ConceptDef::getFileDef(), ConceptDef::getTemplateParameterList(), writeTemplateArgumentList(), and writeTemplateList().

Variable Documentation

◆ compounddef_exists

SqlStmt compounddef_exists
Initial value:
={
"SELECT EXISTS ("
"SELECT * FROM compounddef WHERE rowid = :rowid"
")"
,nullptr
}

Definition at line 794 of file sqlite3gen.cpp.

Referenced by compounddefExists(), and prepareStatements().

◆ compounddef_insert

◆ compoundref_insert

SqlStmt compoundref_insert
Initial value:
={
"INSERT INTO compoundref "
"( base_rowid, derived_rowid, prot, virt ) "
"VALUES "
"(:base_rowid,:derived_rowid,:prot,:virt )"
,nullptr
}

Definition at line 801 of file sqlite3gen.cpp.

Referenced by generateSqlite3ForClass(), and prepareStatements().

◆ contains_insert

SqlStmt contains_insert
Initial value:
={
"INSERT INTO contains "
"( inner_rowid, outer_rowid )"
"VALUES "
"(:inner_rowid,:outer_rowid )"
,nullptr
}

Definition at line 540 of file sqlite3gen.cpp.

Referenced by prepareStatements(), writeInnerClasses(), writeInnerConcepts(), writeInnerDirs(), writeInnerFiles(), writeInnerGroups(), writeInnerModules(), writeInnerNamespaces(), and writeInnerPages().

◆ incl_insert

SqlStmt incl_insert
Initial value:
= {
"INSERT INTO includes "
"( local, src_id, dst_id ) "
"VALUES "
"(:local,:src_id,:dst_id )"
,nullptr
}

Definition at line 527 of file sqlite3gen.cpp.

Referenced by generateSqlite3ForFile(), and prepareStatements().

◆ incl_select

SqlStmt incl_select
Initial value:
= {
"SELECT COUNT(*) FROM includes WHERE "
"local=:local AND src_id=:src_id AND dst_id=:dst_id"
,nullptr
}

Definition at line 534 of file sqlite3gen.cpp.

Referenced by generateSqlite3ForFile(), and prepareStatements().

◆ member_insert

SqlStmt member_insert
Initial value:
={
"INSERT INTO member "
"( scope_rowid, memberdef_rowid, prot, virt ) "
"VALUES "
"(:scope_rowid,:memberdef_rowid,:prot,:virt )"
,nullptr
}

Definition at line 755 of file sqlite3gen.cpp.

Referenced by associateMember(), and prepareStatements().

◆ memberdef_exists

SqlStmt memberdef_exists
Initial value:
={
"SELECT EXISTS (SELECT * FROM memberdef WHERE rowid = :rowid)"
,nullptr
}

Definition at line 587 of file sqlite3gen.cpp.

Referenced by memberdefExists(), and prepareStatements().

◆ memberdef_incomplete

SqlStmt memberdef_incomplete
Initial value:
={
"SELECT EXISTS ("
"SELECT * FROM memberdef WHERE "
"rowid = :rowid AND inline != 2 AND inline != :new_inline"
")"
,nullptr
}

Definition at line 592 of file sqlite3gen.cpp.

Referenced by memberdefIncomplete(), and prepareStatements().

◆ memberdef_insert

SqlStmt memberdef_insert

Definition at line 600 of file sqlite3gen.cpp.

Referenced by generateSqlite3ForMember(), and prepareStatements().

◆ memberdef_param_insert

SqlStmt memberdef_param_insert
Initial value:
={
"INSERT INTO memberdef_param "
"( memberdef_id, param_id)"
"VALUES "
"(:memberdef_id,:param_id)"
,nullptr
}

Definition at line 828 of file sqlite3gen.cpp.

Referenced by insertMemberDefineParams(), insertMemberFunctionParams(), and prepareStatements().

◆ memberdef_update_decl

SqlStmt memberdef_update_decl
Initial value:
={
"UPDATE memberdef SET "
"inline = :inline,"
"file_id = :file_id,"
"line = :line,"
"column = :column,"
"detaileddescription = 'Declaration: ' || :detaileddescription || 'Definition: ' || detaileddescription,"
"briefdescription = 'Declaration: ' || :briefdescription || 'Definition: ' || briefdescription,"
"inbodydescription = 'Declaration: ' || :inbodydescription || 'Definition: ' || inbodydescription "
"WHERE rowid = :rowid"
,nullptr
}

Definition at line 730 of file sqlite3gen.cpp.

Referenced by generateSqlite3ForMember(), and prepareStatements().

◆ memberdef_update_def

SqlStmt memberdef_update_def
Initial value:
={
"UPDATE memberdef SET "
"inline = :inline,"
"bodystart = :bodystart,"
"bodyend = :bodyend,"
"bodyfile_id = :bodyfile_id,"
"detaileddescription = 'Declaration: ' || detaileddescription || 'Definition: ' || :detaileddescription,"
"briefdescription = 'Declaration: ' || briefdescription || 'Definition: ' || :briefdescription,"
"inbodydescription = 'Declaration: ' || inbodydescription || 'Definition: ' || :inbodydescription "
"WHERE rowid = :rowid"
,nullptr
}

Definition at line 742 of file sqlite3gen.cpp.

Referenced by generateSqlite3ForMember(), and prepareStatements().

◆ meta_insert

SqlStmt meta_insert
Initial value:
= {
"INSERT INTO meta "
"( doxygen_version, schema_version, generated_at, generated_on, project_name, project_number, project_brief )"
"VALUES "
"(:doxygen_version,:schema_version,:generated_at,:generated_on,:project_name,:project_number,:project_brief )"
,nullptr
}

Definition at line 519 of file sqlite3gen.cpp.

Referenced by prepareStatements(), and recordMetadata().

◆ param_insert

SqlStmt param_insert
Initial value:
= {
"INSERT INTO param "
"( attributes, type, declname, defname, array, defval, briefdescription ) "
"VALUES "
"(:attributes,:type,:declname,:defname,:array,:defval,:briefdescription)"
,nullptr
}

Definition at line 820 of file sqlite3gen.cpp.

Referenced by insertMemberDefineParams(), insertMemberFunctionParams(), prepareStatements(), and writeTemplateArgumentList().

◆ param_select

SqlStmt param_select
Initial value:
= {
"SELECT rowid FROM param WHERE "
"(attributes IS NULL OR attributes=:attributes) AND "
"(type IS NULL OR type=:type) AND "
"(declname IS NULL OR declname=:declname) AND "
"(defname IS NULL OR defname=:defname) AND "
"(array IS NULL OR array=:array) AND "
"(defval IS NULL OR defval=:defval) AND "
"(briefdescription IS NULL OR briefdescription=:briefdescription)"
,nullptr
}

Definition at line 809 of file sqlite3gen.cpp.

Referenced by insertMemberFunctionParams(), prepareStatements(), and writeTemplateArgumentList().

◆ path_insert

SqlStmt path_insert
Initial value:
= {
"INSERT INTO path "
"( type, local, found, name )"
"VALUES "
"(:type,:local,:found,:name )"
,nullptr
}

Definition at line 552 of file sqlite3gen.cpp.

Referenced by insertPath(), and prepareStatements().

◆ path_select

SqlStmt path_select
Initial value:
= {
"SELECT rowid FROM path WHERE name=:name"
,nullptr
}

Definition at line 548 of file sqlite3gen.cpp.

Referenced by insertPath(), and prepareStatements().

◆ refid_insert

SqlStmt refid_insert
Initial value:
= {
"INSERT INTO refid "
"( refid )"
"VALUES "
"(:refid )"
,nullptr
}

Definition at line 564 of file sqlite3gen.cpp.

Referenced by insertRefid(), and prepareStatements().

◆ refid_select

SqlStmt refid_select
Initial value:
= {
"SELECT rowid FROM refid WHERE refid=:refid"
,nullptr
}

Definition at line 560 of file sqlite3gen.cpp.

Referenced by insertRefid(), and prepareStatements().

◆ reimplements_insert

SqlStmt reimplements_insert
Initial value:
= {
"INSERT INTO reimplements "
"( memberdef_rowid, reimplemented_rowid )"
"VALUES "
"(:memberdef_rowid,:reimplemented_rowid )"
,nullptr
}

Definition at line 579 of file sqlite3gen.cpp.

Referenced by generateSqlite3ForMember(), and prepareStatements().

◆ table_schema

const char* table_schema[][2]

Definition at line 77 of file sqlite3gen.cpp.

Referenced by initializeTables().

◆ view_schema

const char* view_schema[][2]

Definition at line 302 of file sqlite3gen.cpp.

Referenced by initializeViews().

◆ xrefs_insert

SqlStmt xrefs_insert
Initial value:
= {
"INSERT INTO xrefs "
"( src_rowid, dst_rowid, context )"
"VALUES "
"(:src_rowid,:dst_rowid,:context )"
,nullptr
}

Definition at line 572 of file sqlite3gen.cpp.

Referenced by insertMemberReference(), and prepareStatements().