1 package FS::dbdef_table;
13 FS::dbdef_table - Table objects
19 $dbdef_table = new FS::dbdef_table (
22 $FS_dbdef_unique_object,
23 $FS_dbdef_index_object,
24 @FS_dbdef_column_objects,
27 $dbdef_table->addcolumn ( $FS_dbdef_column_object );
29 $table_name = $dbdef_table->name;
30 $dbdef_table->name ("table_name");
32 $table_name = $dbdef_table->primary_keye;
33 $dbdef_table->primary_key ("primary_key");
35 $FS_dbdef_unique_object = $dbdef_table->unique;
36 $dbdef_table->unique ( $FS_dbdef_unique_object );
38 $FS_dbdef_index_object = $dbdef_table->index;
39 $dbdef_table->index ( $FS_dbdef_index_object );
41 @column_names = $dbdef->columns;
43 $FS_dbdef_column_object = $dbdef->column;
45 @sql_statements = $dbdef->sql_create_table;
46 @sql_statements = $dbdef->sql_create_table $datasrc;
50 FS::dbdef_table objects represent a single database table.
58 Creates a new FS::dbdef_table object.
63 my($proto,$name,$primary_key,$unique,$index,@columns)=@_;
65 my(%columns) = map { $_->name, $_ } @columns;
67 #check $primary_key, $unique and $index to make sure they are $columns ?
70 my $class = ref($proto) || $proto;
73 'primary_key' => $primary_key,
76 'columns' => \%columns,
79 bless ($self, $class);
85 Adds this FS::dbdef_column object.
91 ${$self->{'columns'}}{$column->name}=$column; #sanity check?
96 Returns or sets the table name.
102 if ( defined($value) ) {
103 $self->{name} = $value;
111 Returns or sets the primary key.
117 if ( defined($value) ) {
118 $self->{primary_key} = $value;
120 #$self->{primary_key};
121 #hmm. maybe should untaint the entire structure when it comes off disk
122 # cause if you don't trust that, ?
123 $self->{primary_key} =~ /^(\w*)$/
125 or die "Illegal primary key ", $self->{primary_key}, " in dbdef!\n";
132 Returns or sets the FS::dbdef_unique object.
138 if ( defined($value) ) {
139 $self->{unique} = $value;
147 Returns or sets the FS::dbdef_index object.
153 if ( defined($value) ) {
154 $self->{'index'} = $value;
162 Returns a list consisting of the names of all columns.
168 keys %{$self->{'columns'}};
171 =item column "column"
173 Returns the column object (see L<FS::dbdef_column>) for "column".
178 my($self,$column)=@_;
179 $self->{'columns'}->{$column};
182 =item sql_create_table [ $datasrc ]
184 Returns an array of SQL statments to create this table.
186 If passed a DBI $datasrc specifying L<DBD::mysql>, will use MySQL-specific
187 syntax. Non-standard syntax for other engines (if applicable) may also be
188 supported in the future.
192 sub sql_create_table {
193 my($self,$datasrc)=@_;
195 my(@columns)=map { $self->column($_)->line($datasrc) } $self->columns;
196 push @columns, "PRIMARY KEY (". $self->primary_key. ")"
197 if $self->primary_key;
198 if ( $datasrc =~ /mysql/ ) { #yucky mysql hack
199 push @columns, map "UNIQUE ($_)", $self->unique->sql_list;
200 push @columns, map "INDEX ($_)", $self->index->sql_list;
203 "CREATE TABLE ". $self->name. " ( ". join(", ", @columns). " )",
205 my($index) = $self->name. "__". $_ . "_index";
206 $index =~ s/,\s*/_/g;
207 "CREATE UNIQUE INDEX $index ON ". $self->name. " ($_)"
208 } $self->unique->sql_list ),
210 my($index) = $self->name. "__". $_ . "_index";
211 $index =~ s/,\s*/_/g;
212 "CREATE INDEX $index ON ". $self->name. " ($_)"
213 } $self->index->sql_list ),
225 L<FS::dbdef>, L<FS::dbdef_unique>, L<FS::dbdef_index>, L<FS::dbdef_unique>,
230 $Id: dbdef_table.pm,v 1.2 1998-10-14 07:05:06 ivan Exp $
234 class for dealing with table definitions
236 ivan@sisd.com 98-apr-18
238 gained extra functions (should %columns be an IxHash?)
239 ivan@sisd.com 98-may-11
241 sql_create_table returns a list of statments, not just one, and now it
242 does indices (plus mysql hack) ivan@sisd.com 98-jun-2
244 untaint primary_key... hmm. is this a hack around a bigger problem?
245 looks like, did the same thing singles in colgroup!
246 ivan@sisd.com 98-jun-4
248 pod ivan@sisd.com 98-sep-24
250 $Log: dbdef_table.pm,v $
251 Revision 1.2 1998-10-14 07:05:06 ivan
252 1.1.4 release, fix postgresql