Thread

Commits

  1. Fix comment on clearing padding.

  2. Track identical top vs nested queries independently in pg_stat_statements

  1. Incorrect comment for memset() on pgssHashKey?

    Japin Li <japinli@hotmail.com> — 2023-06-27T04:32:10Z

    Hi,
    
    Commit 6b4d23feef introduces a toplevel field in pgssHashKey, which leads
    padding.  In pgss_store(), it comments that memset() is required when
    pgssHashKey is without padding only.
    
    @@ -1224,9 +1227,14 @@ pgss_store(const char *query, uint64 queryId,
         query = CleanQuerytext(query, &query_location, &query_len);
    
         /* Set up key for hashtable search */
    +
    +    /* memset() is required when pgssHashKey is without padding only */
    +    memset(&key, 0, sizeof(pgssHashKey));
    +
         key.userid = GetUserId();
         key.dbid = MyDatabaseId;
         key.queryid = queryId;
    +    key.toplevel = (exec_nested_level == 0);
    
         /* Lookup the hash table entry with shared lock. */
         LWLockAcquire(pgss->lock, LW_SHARED);
    
    However, we need memset() only when pgssHashKey has padding, right?
    
    -- 
    Regrads,
    Japin Li.
    
    
  2. Re: Incorrect comment for memset() on pgssHashKey?

    Heikki Linnakangas <hlinnaka@iki.fi> — 2023-06-27T07:18:11Z

    On 27/06/2023 07:32, Japin Li wrote:
    > 
    > Hi,
    > 
    > Commit 6b4d23feef introduces a toplevel field in pgssHashKey, which leads
    > padding.  In pgss_store(), it comments that memset() is required when
    > pgssHashKey is without padding only.
    > 
    > @@ -1224,9 +1227,14 @@ pgss_store(const char *query, uint64 queryId,
    >       query = CleanQuerytext(query, &query_location, &query_len);
    > 
    >       /* Set up key for hashtable search */
    > +
    > +    /* memset() is required when pgssHashKey is without padding only */
    > +    memset(&key, 0, sizeof(pgssHashKey));
    > +
    >       key.userid = GetUserId();
    >       key.dbid = MyDatabaseId;
    >       key.queryid = queryId;
    > +    key.toplevel = (exec_nested_level == 0);
    > 
    >       /* Lookup the hash table entry with shared lock. */
    >       LWLockAcquire(pgss->lock, LW_SHARED);
    > 
    > However, we need memset() only when pgssHashKey has padding, right?
    
    Yep. I changed the comment to just "clear padding". Thanks!
    
    -- 
    Heikki Linnakangas
    Neon (https://neon.tech)