git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Josh Elsasser <josh@elsasser.org>
Cc: git@vger.kernel.org, Frank Lichtenheld <frank@lichtenheld.de>
Subject: Re: [PATCH v2] Allow git-cvsserver database table name prefix to be specified.
Date: Wed, 19 Mar 2008 22:36:53 -0700	[thread overview]
Message-ID: <7vwsnyx8ga.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <1205989546855-git-send-email-josh@elsasser.org> (Josh Elsasser's message of "Wed, 19 Mar 2008 22:05:46 -0700")

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.  

> 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.

> @@ -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.

> @@ -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.

  reply	other threads:[~2008-03-20  5:37 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-20  5:05 [PATCH v2] Allow git-cvsserver database table name prefix to be specified Josh Elsasser
2008-03-20  5:36 ` Junio C Hamano [this message]
2008-03-27 20:57   ` Josh Elsasser
2008-03-27 21:02     ` [PATCH v3] " Josh Elsasser
2008-03-27 22:35       ` Johannes Schindelin
2008-03-27 23:13       ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vwsnyx8ga.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=frank@lichtenheld.de \
    --cc=git@vger.kernel.org \
    --cc=josh@elsasser.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).