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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Josh Elsasser <josh@xxxxxxxxxxxx> 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.

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux