11//! The module for working with and loading the content from `sql` files
22use std:: fs;
33use std:: io;
4- use std:: io:: Error ;
54use std:: path:: { Path , PathBuf } ;
65
76pub struct SqlFilesList {
@@ -15,8 +14,13 @@ impl SqlFilesList {
1514 sql_files : recursive_scan,
1615 } )
1716 }
18- pub fn sql_files ( & self ) -> & Vec < PathBuf > {
19- return & self . sql_files ;
17+ pub fn sql_files ( & self ) -> & [ PathBuf ] {
18+ & self . sql_files
19+ }
20+ pub fn sql_files_sorted ( & self ) -> Vec < & PathBuf > {
21+ let mut files: Vec < & PathBuf > = self . sql_files . iter ( ) . collect ( ) ;
22+ files. sort ( ) ;
23+ files
2024 }
2125}
2226
@@ -119,4 +123,56 @@ mod tests {
119123 // Optional cleanup
120124 let _ = fs:: remove_dir_all ( & base) ;
121125 }
126+
127+ #[ test]
128+ fn test_sql_file_list ( ) {
129+ let base = env:: temp_dir ( ) . join ( "recursive_scan_test2" ) ;
130+ let _ = fs:: remove_dir_all ( & base) ;
131+ fs:: create_dir_all ( & base) . unwrap ( ) ;
132+ let sub = base. join ( "subdir" ) ;
133+ fs:: create_dir_all ( & sub) . unwrap ( ) ;
134+ let file1 = base. join ( "one.sql" ) ;
135+ let file2 = sub. join ( "two.sql" ) ;
136+ let non_sql1 = base. join ( "ignore.txt" ) ;
137+ let non_sql2 = sub. join ( "README.md" ) ;
138+ fs:: File :: create ( & file1) . unwrap ( ) ;
139+ fs:: File :: create ( & file2) . unwrap ( ) ;
140+ fs:: File :: create ( & non_sql1) . unwrap ( ) ;
141+ fs:: File :: create ( & non_sql2) . unwrap ( ) ;
142+ let sql_file_list = SqlFilesList :: new ( & base) . unwrap ( ) ;
143+ let mut expected = vec ! [ & file1, & file2] ;
144+ expected. sort ( ) ;
145+ assert_eq ! ( sql_file_list. sql_files_sorted( ) , expected) ;
146+ let _ = fs:: remove_dir_all ( & base) ;
147+ }
148+ #[ test]
149+ fn test_sql_file_read ( ) {
150+ let base = env:: temp_dir ( ) . join ( "recursive_scan_test3" ) ;
151+ let _ = fs:: remove_dir_all ( & base) ;
152+ fs:: create_dir_all ( & base) . unwrap ( ) ;
153+ let sub = base. join ( "subdir" ) ;
154+ fs:: create_dir_all ( & sub) . unwrap ( ) ;
155+ let file1 = base. join ( "one.sql" ) ;
156+ let file2 = sub. join ( "two.sql" ) ;
157+ let non_sql1 = base. join ( "ignore.txt" ) ;
158+ let non_sql2 = sub. join ( "README.md" ) ;
159+ fs:: File :: create ( & file1) . unwrap ( ) ;
160+ fs:: File :: create ( & file2) . unwrap ( ) ;
161+ fs:: File :: create ( & non_sql1) . unwrap ( ) ;
162+ fs:: File :: create ( & non_sql2) . unwrap ( ) ;
163+ let sql_statement = "CREATE TABLE users( id INTEGER PRIMARY KEY);" ;
164+ fs:: write ( & file1, sql_statement) . unwrap ( ) ;
165+ fs:: write ( & file2, sql_statement) . unwrap ( ) ;
166+ let mut expected = vec ! [ & file1, & file2] ;
167+ expected. sort ( ) ;
168+ let mut found: Vec < & PathBuf > = Vec :: new ( ) ;
169+ let sql_file_set = SqlFileSet :: new ( & base) . unwrap ( ) ;
170+ for file in sql_file_set. iter ( ) {
171+ assert_eq ! ( file. content, sql_statement) ;
172+ found. push ( & file. path ) ;
173+ }
174+ assert_eq ! ( found, expected) ;
175+ let _ = fs:: remove_dir_all ( & base) ;
176+ }
177+
122178}
0 commit comments