Hello.

JDBC connection URLs for H2 aren't related with URIs in any way.

jdbc:h2:<file name>, jdbc:h2:file:<file name>, and jdbc:h2:nio:<file name> 
mean the same in the current H2 and there are no good reasons to use file: 
or nio: prefixes. In older versions they were different (and they also were 
different between PageStore and MVStore engines).

There are other subsystems, such as niomapped:, async:, retry:, split:, 
encrypt:, zip: and so on and they can also be cascaded.

Not every URL for H2 contains a file name. mem: represents a normal 
in-memory database, memFS:, memLZF:, nioMemFS:, and nioMemLZF: represent 
alternative in-memory storages and H2 works with them in entirely different 
way (more like with with files).

tcp: and ssl: are used for remote connections. TCP server may have some 
configured base directory where database files can be located, but it also 
can use the whole file system of the server, it depends on its 
configuration.

Database files also have .mv.db or h2.db extensions, these extensions 
aren't specified in the URL. If MV_STORE setting is not specified, there is 
no way to get this extension from the URL, it depends on the actual file on 
the disk.

There is no reliable way to get the file name from the JDBC URL, but if you 
have a connection, you can try to use the DATABASE_PATH() function.

In the current H2 you can use
CALL DATABASE_PATH() || CASE (SELECT CAST(SETTING_VALUE AS BOOLEAN) FROM 
INFORMATION_SCHEMA.SETTINGS WHERE SETTING_NAME = 'MV_STORE') WHEN TRUE THEN 
'.mv.db' ELSE '.h2.db' END;
to get the file name if database uses the the default file system without 
any subsystems.

For 1.4.200 this command needs to be edited, 
because INFORMATION_SCHEMA.SETTINGS had different names of columns (NAME 
and VALUE).

If NULL is returned, the database is a normal in-memory database (without 
special in-memory file systems). To support more special cases, you need to 
check the result for async: and other prefixes (possibly cascaded).

You can also try to parse the URL itself, but you need to support more 
special cases and you need to know settings of all your servers, if you 
want to support the remote URLs properly. Perhaps you don't need the full 
paths on remote servers anyway, so you can only detect tcp: and ssl: 
prefixes.

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to h2-database+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/h2-database/cf1aeb4a-fd88-46e3-aea4-76b4096881b4n%40googlegroups.com.

Reply via email to