Index: /trunk/lib/MP3/Find/DB.pm
===================================================================
--- /trunk/lib/MP3/Find/DB.pm	(revision 30)
+++ /trunk/lib/MP3/Find/DB.pm	(revision 31)
@@ -158,4 +158,28 @@
     status_callback => sub {}
 
+=head2 create
+
+    $finder->create({
+	dsn => 'dbi:SQLite:dbname=mp3.db',
+	dbh => $dbh,
+	db_file => 'mp3.db',
+    });
+
+Creates a new table for storing mp3 info in the database. You can provide
+either a DSN (plus username and password, if needed), an already created
+database handle, or just the name of an SQLite database file.
+
+=cut
+
+sub create {
+    my $self = shift;
+    my $args = shift;
+
+    my $dbh = _get_dbh($args) or croak "Please provide a DBI database handle, DSN, or SQLite database filename";
+    
+    my $create = 'CREATE TABLE mp3 (' . join(',', map { "$$_[0] $$_[1]" } @COLUMNS) . ')';
+    $dbh->do($create);
+}
+
 =head2 create_db
 
@@ -172,5 +196,6 @@
     my $db_file = shift or croak "Need a name for the database I'm about to create";
     my $dbh = DBI->connect("dbi:SQLite:dbname=$db_file", '', '', {RaiseError => 1});
-    $dbh->do('CREATE TABLE mp3 (' . join(',', map { "$$_[0] $$_[1]" } @COLUMNS) . ')');
+    my $create = 'CREATE TABLE mp3 (' . join(',', map { "$$_[0] $$_[1]" } @COLUMNS) . ')';
+    $dbh->do($create);
 }
 
@@ -190,4 +215,29 @@
 =cut
 
+sub _get_dbh {
+    my $args = shift;
+    return $args->{dbh} if defined $args->{dbh};
+    if (defined $args->{dsn}) {
+    	my $dbh = DBI->connect(
+	    $args->{dsn}, 
+	    $args->{username}, 
+	    $args->{password}, 
+	    { RaiseError => 1 },
+	);
+	return $dbh;
+    }
+    # default to a SQLite database
+    if (defined $args->{db_file}) {
+	my $dbh = DBI->connect(
+	    "dbi:SQLite:dbname=$$args{db_file}",
+	    '',
+	    '',
+	    { RaiseError => 1 },
+	);
+	return $dbh;
+    }
+    return;
+}
+	
 # this is update_db and update_files (from Matt Dietrich) rolled into one
 sub update {
@@ -195,5 +245,6 @@
     my $args = shift;
 
-    my $dsn   = $args->{dsn} or croak "Need a DSN to connect to";
+    my $dbh = _get_dbh($args) or croak "Please provide a DBI database handle, DSN, or SQLite database filename";
+
     my @dirs  = $args->{dirs}
 		    ? ref $args->{dirs} eq 'ARRAY'
@@ -210,5 +261,4 @@
     my $status_callback = $self->{status_callback} || $DEFAULT_STATUS_CALLBACK;
 
-    my $dbh = DBI->connect($dsn, '', '', {RaiseError => 1});
     my $mtime_sth = $dbh->prepare('SELECT mtime FROM mp3 WHERE FILENAME = ?');
     my $insert_sth = $dbh->prepare(
