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

sqlite3: support for includes and includedby

parent 2d0f3894
Loading
Loading
Loading
Loading
+46 −16
Original line number Original line Diff line number Diff line
@@ -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] =
    "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)


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)
  // - 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)
    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)
    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);
      }
      }
    }
    }