Commit 38f39408 authored by Adrian Negreanu's avatar Adrian Negreanu

sqlite3: support for includes and includedby

Signed-off-by: 's avatarAdrian Negreanu <groleo@gmail.com>
parent 2d0f3894
...@@ -47,12 +47,12 @@ ...@@ -47,12 +47,12 @@
////////////////////////////////////////////////////// //////////////////////////////////////////////////////
const char *i_q_includes="INSERT OR REPLACE INTO includes " const char *i_q_includes="INSERT OR REPLACE INTO includes "
"( refid, local, name ) " "( local, id_src, dst ) "
"VALUES " "VALUES "
"(:refid,:local,:name )" ; "(:local,:id_src,:dst )" ;
const char *c_q_includes="SELECT count(*) from includes where refid=:refid and local=:local and name=:name"; const char *c_q_includes="SELECT count(*) FROM includes WHERE local=:local and id_src=:id_src and dst=:dst";
static sqlite3_stmt *i_s_includes=0;
static sqlite3_stmt *c_s_includes=0; static sqlite3_stmt *c_s_includes=0;
static sqlite3_stmt *i_s_includes=0;
////////////////////////////////////////////////////// //////////////////////////////////////////////////////
const char *i_q_innerclass="INSERT OR REPLACE INTO innerclass " const char *i_q_innerclass="INSERT OR REPLACE INTO innerclass "
"( refid, prot, name )" "( refid, prot, name )"
...@@ -139,9 +139,9 @@ const char * schema_queries[][2] = ...@@ -139,9 +139,9 @@ const char * schema_queries[][2] =
"includes", "includes",
"CREATE TABLE IF NOT EXISTS includes (" "CREATE TABLE IF NOT EXISTS includes ("
"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
"refid TEXT NOT NULL,"
"local INTEGER NOT NULL," "local INTEGER NOT NULL,"
"name TEXT NOT NULL)" "id_src INTEGER NOT NULL,"
"dst TEXT NOT NULL)"
}, },
{ {
"innerclass", "innerclass",
...@@ -287,11 +287,10 @@ static int insertFile(sqlite3 *db, const char* name) ...@@ -287,11 +287,10 @@ static int insertFile(sqlite3 *db, const char* name)
static void insertMemberReference(sqlite3 *db, const char*src, const char*dst, const char *file, int line, int column) static void insertMemberReference(sqlite3 *db, const char*src, const char*dst, const char *file, int line, int column)
{ {
int id_file = insertFile(db,file);
bindTextParameter(i_s_xrefs,":src",src); bindTextParameter(i_s_xrefs,":src",src);
bindTextParameter(i_s_xrefs,":dst",dst); bindTextParameter(i_s_xrefs,":dst",dst);
int id_file = insertFile(db,file);
bindIntParameter(i_s_xrefs,":id_file",id_file); bindIntParameter(i_s_xrefs,":id_file",id_file);
bindIntParameter(i_s_xrefs,":line",line); bindIntParameter(i_s_xrefs,":line",line);
bindIntParameter(i_s_xrefs,":column",column); bindIntParameter(i_s_xrefs,":column",column);
...@@ -551,6 +550,37 @@ static void generateSqlite3ForFile(sqlite3 *db, FileDef *fd) ...@@ -551,6 +550,37 @@ static void generateSqlite3ForFile(sqlite3 *db, FileDef *fd)
// - number of lines // - number of lines
if (fd->isReference()) return; // skip external references if (fd->isReference()) return; // skip external references
// + includes files
IncludeInfo *ii;
if (fd->includeFileList())
{
QListIterator<IncludeInfo> ili(*fd->includeFileList());
for (ili.toFirst();(ii=ili.current());++ili)
{
int id_file=insertFile(db,fd->absFilePath().data());
bindIntParameter(i_s_includes,":local",ii->local);
bindIntParameter(i_s_includes,":id_src",id_file);
bindTextParameter(i_s_includes,":dst",ii->includeName.data(),FALSE);
step(db,i_s_includes);
}
}
// + includedby files
if (fd->includedByFileList())
{
QListIterator<IncludeInfo> ili(*fd->includedByFileList());
for (ili.toFirst();(ii=ili.current());++ili)
{
int id_file=insertFile(db,ii->includeName);
bindIntParameter(i_s_includes,":local",ii->local);
bindIntParameter(i_s_includes,":id_src",id_file);
bindTextParameter(i_s_includes,":dst",fd->absFilePath().data(),FALSE);
step(db,i_s_includes);
}
}
// + contained class definitions
if (fd->getClassSDict()) if (fd->getClassSDict())
{ {
writeInnerClasses(db,fd->getClassSDict()); writeInnerClasses(db,fd->getClassSDict());
...@@ -803,14 +833,14 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) ...@@ -803,14 +833,14 @@ static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def)
linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,md->initializer()); linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,md->initializer());
QCString *s=l.first(); QCString *s=l.first();
while (s) while (s)
{
if (md->getBodyDef())
{ {
DBG_CTX(("initializer:%s %s %s %d\n", DBG_CTX(("initializer:%s %s %s %d\n",
md->anchor().data(), md->anchor().data(),
s->data(), s->data(),
md->getBodyDef()->getDefFileName().data(), md->getBodyDef()->getDefFileName().data(),
md->getStartBodyLine())); md->getStartBodyLine()));
if (md->getBodyDef())
{
insertMemberReference(db,md->anchor().data(),s->data(),md->getBodyDef()->getDefFileName().data(),md->getStartBodyLine(),1); insertMemberReference(db,md->anchor().data(),s->data(),md->getBodyDef()->getDefFileName().data(),md->getStartBodyLine(),1);
} }
s=l.next(); s=l.next();
...@@ -966,15 +996,15 @@ static void generateSqlite3ForClass(sqlite3 *db, ClassDef *cd) ...@@ -966,15 +996,15 @@ static void generateSqlite3ForClass(sqlite3 *db, ClassDef *cd)
if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName(); if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName();
if (!nm.isEmpty()) if (!nm.isEmpty())
{ {
bindTextParameter(c_s_includes,":refid",ii->fileDef->getOutputFileBase());
bindIntParameter(c_s_includes,":local",ii->local); bindIntParameter(c_s_includes,":local",ii->local);
bindTextParameter(c_s_includes,":name",nm); bindIntParameter(c_s_includes,":id_src",id_file);
bindTextParameter(c_s_includes,":dst",nm);
int count=step(db,c_s_includes,TRUE); int count=step(db,c_s_includes,TRUE);
if ( count==0 ) if (count==0)
{ {
bindTextParameter(i_s_includes,":refid",ii->fileDef->getOutputFileBase());
bindIntParameter(i_s_includes,":local",ii->local); bindIntParameter(i_s_includes,":local",ii->local);
bindTextParameter(i_s_includes,":name",nm); bindIntParameter(i_s_includes,":id_src",id_file);
bindTextParameter(i_s_includes,":dst",nm);
step(db,i_s_includes); step(db,i_s_includes);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment