@@ -795,6 +795,24 @@ static VALUE transaction_active_p(VALUE self)
795795 return sqlite3_get_autocommit (ctx -> db ) ? Qfalse : Qtrue ;
796796}
797797
798+ /* call-seq: db.db_filename(database_name)
799+ *
800+ * Returns the file associated with +database_name+. Can return nil or an
801+ * empty string if the database is temporary, or in-memory.
802+ */
803+ static VALUE db_filename (VALUE self , VALUE db_name )
804+ {
805+ sqlite3RubyPtr ctx ;
806+ const char * fname ;
807+ Data_Get_Struct (self , sqlite3Ruby , ctx );
808+ REQUIRE_OPEN_DB (ctx );
809+
810+ fname = sqlite3_db_filename (ctx -> db , StringValueCStr (db_name ));
811+
812+ if (fname ) return SQLITE3_UTF8_STR_NEW2 (fname );
813+ return Qnil ;
814+ }
815+
798816void init_sqlite3_database ()
799817{
800818 ID id_utf16 , id_results_as_hash , id_type_translation ;
@@ -822,6 +840,7 @@ void init_sqlite3_database()
822840 rb_define_method (cSqlite3Database , "busy_handler" , busy_handler , -1 );
823841 rb_define_method (cSqlite3Database , "busy_timeout=" , set_busy_timeout , 1 );
824842 rb_define_method (cSqlite3Database , "transaction_active?" , transaction_active_p , 0 );
843+ rb_define_method (cSqlite3Database , "db_filename" , db_filename , 1 );
825844
826845#ifdef HAVE_SQLITE3_LOAD_EXTENSION
827846 rb_define_method (cSqlite3Database , "load_extension" , load_extension , 1 );
0 commit comments