|
32 | 32 | import tech.tablesaw.api.ColumnType;
|
33 | 33 | import tech.tablesaw.columns.Column;
|
34 | 34 |
|
35 |
| -import java.util.Arrays; |
36 |
| -import java.util.List; |
37 |
| -import java.util.NoSuchElementException; |
| 35 | +import java.util.*; |
38 | 36 | import java.util.stream.Collectors;
|
39 | 37 |
|
40 | 38 | /**
|
@@ -139,30 +137,37 @@ public void promptForConnectionParameters(ConnectionSpec connectionSpec, boolean
|
139 | 137 | duckdbSpec.setFilesFormatType(terminalReader.promptEnum("Type of source files for DuckDB", DuckdbFilesFormatType.class, null, false));
|
140 | 138 | }
|
141 | 139 |
|
142 |
| - if (duckdbSpec.getDirectories().isEmpty()) { |
| 140 | + if (duckdbSpec.getDirectoriesString().isEmpty()) { |
143 | 141 | if (isHeadless) {
|
144 | 142 | throw new CliRequiredParameterMissingException("--duckdb-directories");
|
145 | 143 | }
|
| 144 | + duckdbSpec.setDirectoriesString(terminalReader.prompt("Virtual schema name and path in a pattern: schema=path. For multiple use pattern: schema=path1,schema=path2", null, false)); |
| 145 | + } |
146 | 146 |
|
147 |
| - String directoriesRaw = terminalReader.prompt("Virtual schema names and paths (in a pattern schema=path)", null, false); |
148 |
| - if(!directoriesRaw.contains("/") && !directoriesRaw.contains("\\")){ |
149 |
| - throw new RuntimeException("The provided path is invalid. The path should be an absolute path to the directory with folders or files. On Windows use double backslash (\\\\)."); |
150 |
| - } |
151 |
| - List<String> directories = Arrays.stream(directoriesRaw.split(",")).collect(Collectors.toList()); |
152 |
| - |
153 |
| - for (String directory : directories) { |
154 |
| - List<String> schemaDirectory = Arrays.stream(directory.split("=")) |
155 |
| - .map(String::trim) |
156 |
| - .collect(Collectors.toList()); |
157 |
| - if(schemaDirectory.size() != 2){ |
158 |
| - throw new RuntimeException("Unbalanced values for " + directory + "." + |
159 |
| - "Ensure you provide directories in a schema=path pattern."); |
160 |
| - } |
161 |
| - duckdbSpec.getDirectories().put(schemaDirectory.get(0), schemaDirectory.get(1)); |
162 |
| - } |
| 147 | + Map<String, String> directories = parseDirectoriesString(duckdbSpec.getDirectoriesString()); |
| 148 | + duckdbSpec.setDirectories(directories); |
| 149 | + } |
163 | 150 |
|
| 151 | + Map<String, String> parseDirectoriesString(String directoriesRaw){ |
| 152 | + Map<String, String> directories = new HashMap<>(); |
| 153 | + |
| 154 | + if(!directoriesRaw.contains("/") && !directoriesRaw.contains("\\")){ |
| 155 | + throw new RuntimeException("The provided path is invalid. The path should be an absolute path to the directory with folders or files. On Windows use double backslash (\\\\)."); |
| 156 | + } |
| 157 | + List<String> singleMapping = Arrays.stream(directoriesRaw.split(",")).collect(Collectors.toList()); |
| 158 | + |
| 159 | + for (String mapping : singleMapping) { |
| 160 | + List<String> schemaDirectory = Arrays.stream(mapping.split("=")) |
| 161 | + .map(String::trim) |
| 162 | + .collect(Collectors.toList()); |
| 163 | + if(schemaDirectory.size() != 2){ |
| 164 | + throw new RuntimeException("Unbalanced values for " + mapping + "." + |
| 165 | + "Ensure you provide directories in a schema=path pattern."); |
| 166 | + } |
| 167 | + directories.put(schemaDirectory.get(0), schemaDirectory.get(1)); |
164 | 168 | }
|
165 | 169 |
|
| 170 | + return directories; |
166 | 171 | }
|
167 | 172 |
|
168 | 173 | /**
|
|
0 commit comments