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