IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

la structure sqlite3


Sujet :

SQLite

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Par défaut la structure sqlite3
    bonjour ,
    pour avancer comprendre les sources de sqlite3 il faut d'abord comprendre la structure sqlite3.mais j'ai pas encore saisai cette structure est ce que quelqu'un peut m'expliquer cette structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    struct sqlite3 
    {
      sqlite3_vfs *pVfs;            /* OS Interface */
      int nDb;                      /* Number of backends currently in use */
      Db *aDb;                      /* All backends */
      int flags;                    /* Miscellanous flags. See below */
      int openFlags;                /* Flags passed to sqlite3_vfs.xOpen() */
      int errCode;                  /* Most recent error code (SQLITE_*) */
      int errMask;                  /* & result codes with this before returning */
      u8 autoCommit;                /* The auto-commit flag. */
      u8 temp_store;                /* 1: file 2: memory 0: default */
      u8 mallocFailed;              /* True if we have seen a malloc failure */
      u8 dfltLockMode;              /* Default locking-mode for attached dbs */
      u8 dfltJournalMode;           /* Default journal mode for attached dbs */
      signed char nextAutovac;      /* Autovac setting after VACUUM if >=0 */
      int nextPagesize;             /* Pagesize after VACUUM if >0 */
      int nTable;                   /* Number of tables in the database */
      CollSeq *pDfltColl;           /* The default collating sequence (BINARY) */
      i64 lastRowid;                /* ROWID of most recent insert (see above) */
      i64 priorNewRowid;            /* Last randomly generated ROWID */
      int magic;                    /* Magic number for detect library misuse */
      int nChange;                  /* Value returned by sqlite3_changes() */
      int nTotalChange;             /* Value returned by sqlite3_total_changes() */
    ///////////////////////////////
    /**/  sqlite3_mutex *mutex;   /**/      /* Connection mutex */
    ///////////////////////////////
      int aLimit[SQLITE_N_LIMIT];   /* Limits */
      struct sqlite3InitInfo {      /* Information used during initialization */
        int iDb;                    /* When back is being initialized */
        int newTnum;                /* Rootpage of table being initialized */
        u8 busy;                    /* TRUE if currently initializing */
      } init;
      int nExtension;               /* Number of loaded extensions */
      void **aExtension;            /* Array of shared libraray handles */
      struct Vdbe *pVdbe;           /* List of active virtual machines */
      int activeVdbeCnt;            /* Number of vdbes currently executing */
      void (*xTrace)(void*,const char*);        /* Trace function */
      void *pTraceArg;                          /* Argument to the trace function */
      void (*xProfile)(void*,const char*,u64);  /* Profiling function */
      void *pProfileArg;                        /* Argument to profile function */
      void *pCommitArg;                 /* Argument to xCommitCallback() */   
      int (*xCommitCallback)(void*);    /* Invoked at every commit. */
      void *pRollbackArg;               /* Argument to xRollbackCallback() */   
      void (*xRollbackCallback)(void*); /* Invoked at every commit. */
      void *pUpdateArg;
      void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
      void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*);
      void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*);
      void *pCollNeededArg;
      sqlite3_value *pErr;          /* Most recent error message */
      char *zErrMsg;                /* Most recent error message (UTF-8 encoded) */
      char *zErrMsg16;              /* Most recent error message (UTF-16 encoded) */
      union {
        int isInterrupted;          /* True if sqlite3_interrupt has been called */
        double notUsed1;            /* Spacer */
      } u1;
    #ifndef SQLITE_OMIT_AUTHORIZATION
      int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
                                    /* Access authorization function */
      void *pAuthArg;               /* 1st argument to the access auth function */
    #endif
    #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
      int (*xProgress)(void *);     /* The progress callback */
      void *pProgressArg;           /* Argument to the progress callback */
      int nProgressOps;             /* Number of opcodes for progress callback */
    #endif
    #ifndef SQLITE_OMIT_VIRTUALTABLE
      Hash aModule;                 /* populated by sqlite3_create_module() */
      Table *pVTab;                 /* vtab with active Connect/Create method */
      sqlite3_vtab **aVTrans;       /* Virtual tables with open transactions */
      int nVTrans;                  /* Allocated size of aVTrans */
    #endif
      Hash aFunc;                   /* All functions that can be in SQL exprs */
      Hash aCollSeq;                /* All collating sequences */
      BusyHandler busyHandler;      /* Busy callback */
      int busyTimeout;              /* Busy handler timeout, in msec */
      Db aDbStatic[2];              /* Static space for the 2 default backends */
    #ifdef SQLITE_SSE
      sqlite3_stmt *pFetch;         /* Used by SSE to fetch stored statements */
    #endif
    merci d'avance

  2. #2
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Par défaut
    Salut moha98,

    Désolé mais ta demande est beaucoup trop complexe et trop vaste. On ne peut pas passer plusieurs dizaines de minutes à décortiquer la structure de sqlite3 pour te l'expliquer pas à pas. Il y a de nombreux commentaires en anglais et chaque fonction interne est elle même documentée.

    En bref, on peut dire que la structure sqlite3 est utilisée comme un objet. Lors de l'ouverture de la base on crée une variable "db" de type sqlite3 qui sera utilisée dans la plupart des fonctions. Elle contient donc des propriétés (variables, pointeurs sur des variables ou structures) et méthodes (pointeurs sur des fonctions). Lorsqu'on veut surcharger une des méthodes du moteur sql il suffit alors de modifier le pointeur correspondant et de lui indiquer l'adresse de la nouvelle fonction.

    Comme dans la programmation objet, on ne devrait pas accéder en lecture ou écriture aux propriétés de l'objet db, il y a assez de fonctions préparées par les développeurs pour faire ce travail plus proprement.

    Par exemple, on pourrait très bien utiliser les champs db->errCode et db->pErr pour y inscrire un code d'erreur et son libellé mais en fait il faut utiliser la méthode suivante qui fait très exactement ce travail :
    void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...)
    (cf. util.c ligne 70 ).
    Ainsi, le jour où SQLite change sa structure on reste compatible.

    a+

Discussions similaires

  1. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  2. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  3. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo