git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] Allow git-cvsserver database table name prefix to be specified.

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 20, 2008, 05:36 UTC
Message-ID
<7vwsnyx8ga.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<1205989546855-git-send-email-josh@elsasser.org>
Josh Elsasser <josh@elsasser.org> writes:
> The purpose of this patch is to easily allow a single database (think
> PostgreSQL or MySQL) to be shared by multiple repositories.

I am not sure if this is even a good idea. You can share a single database cluster (in PostgreSQL lingo, I do not recall how MySQL calls it) and have multiple database instances on it, which would give you better isolation between repositories. What's the advantage of your approach, I have to wonder.

> +gitcvs.dbprefix::
And it would not be dbprefix but table name prefix.  
Show 10 quoted lines
> diff --git a/git-cvsserver.perl b/git-cvsserver.perl
> index 7f632af..fe6464f 100755
> --- a/git-cvsserver.perl
> +++ b/git-cvsserver.perl
> @@ -2326,6 +2326,8 @@ sub new
>          $cfg->{gitcvs}{dbuser} || "";
>      $self->{dbpass} = $cfg->{gitcvs}{$state->{method}}{dbpass} ||
>          $cfg->{gitcvs}{dbpass} || "";
> +    $self->{dbprefix} = $cfg->{gitcvs}{$state->{method}}{dbprefix} ||
> +        $cfg->{gitcvs}{dbprefix} || "";
Ok.
Show 6 quoted lines
> @@ -2334,6 +2336,8 @@ sub new
>                      );
>      $self->{dbname} =~ s/%([mauGg])/$mapping{$1}/eg;
>      $self->{dbuser} =~ s/%([mauGg])/$mapping{$1}/eg;
> +    $self->{dbprefix} =~ s/%([mauGg])/$mapping{$1}/eg;
> +    $self->{dbprefix} = mangle_tablename($self->{dbprefix});
Ok.
Show 6 quoted lines
> @@ -2349,10 +2353,10 @@ sub new
>      }
>  
>      # Construct the revision table if required
> -    unless ( $self->{tables}{revision} )
> +    unless ( $self->{tables}{"$self->{dbprefix}revision"} )

Hmmm. If we are going to insist on having multiple tables in a single database, can we make sure we have better chances of catching mistakes by doing something like...

    * Identify the set of tables and indices one repository would use
      (i.e. revision, revision_ix1, etc.)
    * Instead of doing things like this:
> -            CREATE TABLE revision (
> +            CREATE TABLE $self->{dbprefix}revision (
> -    my $insert_rev = $self->{dbh}->prepare_cached("INSERT INTO revision (name, revision, filehash, commithash, modified, author, mode) VALUES (?,?,?,?,?,?,?)",{},1);
> +    my $insert_rev = $self->{dbh}->prepare_cached("INSERT INTO $self->{dbprefix}revision (name, revision, filehash, commithash, modified, author, mode) VALUES (?,?,?,?,?,?,?)",{},1);
      Define symbolic name for the full name of tables and indices you
      identified in the previous step to avoid typos.  Perhaps use a per
      GITCVS::updater instance slot $self->{revision_table}, or a method
      that returns these names (so that you would get an empty string and
      blattant SQL statement error if you make typos in your program)?

But I do not have _so_ strong opinion on these. GITCVS::updater module seems to abstract the individual access operations (e.g. insert_rev, insert_mergelog) reasonably well, so perhaps I am worrying too much.

Previous: Josh ElsasserNext: Josh Elsasser
Message 2 of 6 in “Allow git-cvsserver database table name prefix to be specified.”
  1. Allow git-cvsserver database table name prefix to be specified.Josh Elsasser, Mar 20, 2008
  2. Junio C HamanoMar 20, 2008
  3. Josh ElsasserMar 27, 2008
  4. Allow git-cvsserver database table name prefix to be specified.Josh Elsasser, Mar 27, 2008
  5. Johannes SchindelinMar 27, 2008
  6. Junio C HamanoMar 27, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.