diff --git a/Cargo.lock b/Cargo.lock
index f12a2511..c939d7e3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -214,9 +214,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ahash"
-version = "0.8.6"
+version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
dependencies = [
"cfg-if",
"getrandom",
@@ -578,9 +578,9 @@ checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad"
[[package]]
name = "cargo-platform"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff"
+checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d"
dependencies = [
"serde",
]
@@ -1820,13 +1820,13 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
[[package]]
name = "is-terminal"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455"
dependencies = [
"hermit-abi",
"rustix",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -2110,9 +2110,9 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.6.4"
+version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]]
name = "memmap2"
@@ -3474,9 +3474,9 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]]
name = "similar"
-version = "2.3.0"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
+checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21"
[[package]]
name = "simplecss"
@@ -3982,15 +3982,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "tempfile"
-version = "3.8.1"
+version = "3.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
dependencies = [
"cfg-if",
"fastrand",
"redox_syscall",
"rustix",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
diff --git a/docs/src/env-vars.md b/docs/src/env-vars.md
index 9df5cffa..0c9ef753 100644
--- a/docs/src/env-vars.md
+++ b/docs/src/env-vars.md
@@ -2,10 +2,10 @@
You can also configure Martin using environment variables, but only if the configuration file is not used. See [configuration section](config-file.md) on how to use environment variables with config files. See also [SSL configuration](pg-connections.md#postgresql-ssl-connections) section below.
-| Environment var
Config File key | Example | Description |
-|------------------------------------------|--------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `DATABASE_URL`
`connection_string` | `postgresql://postgres@localhost/db` | Postgres database connection |
-| `DEFAULT_SRID`
`default_srid` | `4326` | If a PostgreSQL table has a geometry column with SRID=0, use this value instead |
-| `PGSSLCERT`
`ssl_cert` | `./postgresql.crt` | A file with a client SSL certificate. [docs](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCERT) |
-| `PGSSLKEY`
`ssl_key` | `./postgresql.key` | A file with the key for the client SSL certificate. [docs](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLKEY) |
-| `PGSSLROOTCERT`
`ssl_root_cert` | `./root.crt` | A file with trusted root certificate(s). The file should contain a sequence of PEM-formatted CA certificates. [docs](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLROOTCERT)
This env var used to be called `CA_ROOT_FILE`, but support for it will be removed soon. |
+| Environment var
Config File key | Example | Description |
+|------------------------------------------|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `DATABASE_URL`
`connection_string` | `postgresql://postgres@localhost/db` | Postgres database connection |
+| `DEFAULT_SRID`
`default_srid` | `4326` | If a PostgreSQL table has a geometry column with SRID=0, use this value instead |
+| `PGSSLCERT`
`ssl_cert` | `./postgresql.crt` | A file with a client SSL certificate. [docs](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLCERT) |
+| `PGSSLKEY`
`ssl_key` | `./postgresql.key` | A file with the key for the client SSL certificate. [docs](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLKEY) |
+| `PGSSLROOTCERT`
`ssl_root_cert` | `./root.crt` | A file with trusted root certificate(s). The file should contain a sequence of PEM-formatted CA certificates. [docs](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLROOTCERT) |
diff --git a/martin/src/args/pg.rs b/martin/src/args/pg.rs
index 7f29960c..a0da3a00 100644
--- a/martin/src/args/pg.rs
+++ b/martin/src/args/pg.rs
@@ -105,7 +105,6 @@ impl PgArgs {
}
for v in &[
- "CA_ROOT_FILE",
"DANGER_ACCEPT_INVALID_CERTS",
"DATABASE_URL",
"DEFAULT_SRID",
@@ -167,13 +166,6 @@ impl PgArgs {
if result.ssl_root_cert.is_none() {
result.ssl_root_cert = Self::parse_env_var(env, "PGSSLROOTCERT", "root certificate(s)");
}
- if result.ssl_root_cert.is_none() {
- result.ssl_root_cert = Self::parse_env_var(
- env,
- "CA_ROOT_FILE",
- "root certificate(s). This setting is obsolete, please use PGSSLROOTCERT instead",
- );
- }
result
}
@@ -255,7 +247,7 @@ mod tests {
("DATABASE_URL", os("postgres://localhost:5432")),
("DEFAULT_SRID", os("10")),
("DANGER_ACCEPT_INVALID_CERTS", os("1")),
- ("CA_ROOT_FILE", os("file")),
+ ("PGSSLROOTCERT", os("file")),
]
.into_iter()
.collect(),
diff --git a/martin/src/args/root.rs b/martin/src/args/root.rs
index 51896400..2fc83c2d 100644
--- a/martin/src/args/root.rs
+++ b/martin/src/args/root.rs
@@ -65,14 +65,11 @@ impl Args {
pub fn merge_into_config<'a>(
self,
config: &mut Config,
- env: &impl Env<'a>,
+ #[allow(unused_variables)] env: &impl Env<'a>,
) -> MartinResult<()> {
if self.meta.watch {
warn!("The --watch flag is no longer supported, and will be ignored");
}
- if env.has_unused_var("WATCH_MODE") {
- warn!("The WATCH_MODE env variable is no longer supported, and will be ignored");
- }
if self.meta.config.is_some() && !self.meta.connection.is_empty() {
return Err(ConfigAndConnectionsError(self.meta.connection));
}
@@ -138,19 +135,17 @@ pub fn parse_file_args(
) -> FileConfigEnum {
use crate::args::State::{Ignore, Share, Take};
- let paths = cli_strings.process(|s| match PathBuf::try_from(s) {
- Ok(v) => {
- if allow_url && is_url(s, extension) {
- Take(v)
- } else if v.is_dir() {
- Share(v)
- } else if v.is_file() && v.extension().map_or(false, |e| e == extension) {
- Take(v)
- } else {
- Ignore
- }
+ let paths = cli_strings.process(|s| {
+ let path = PathBuf::from(s);
+ if allow_url && is_url(s, extension) {
+ Take(path)
+ } else if path.is_dir() {
+ Share(path)
+ } else if path.is_file() && path.extension().map_or(false, |e| e == extension) {
+ Take(path)
+ } else {
+ Ignore
}
- Err(_) => Ignore,
});
FileConfigEnum::new(paths)
diff --git a/mbtiles/src/validation.rs b/mbtiles/src/validation.rs
index 34ce483a..9680a980 100644
--- a/mbtiles/src/validation.rs
+++ b/mbtiles/src/validation.rs
@@ -456,6 +456,41 @@ LIMIT 1;"
}
}
+/// Compute the hash of the combined tiles in the mbtiles file tiles table/view.
+/// This should work on all mbtiles files perf `MBTiles` specification.
+pub async fn calc_agg_tiles_hash(conn: &mut T) -> MbtResult
+where
+ for<'e> &'e mut T: SqliteExecutor<'e>,
+{
+ debug!("Calculating agg_tiles_hash");
+ let query = query(
+ // The md5_concat func will return NULL if there are no rows in the tiles table.
+ // For our use case, we will treat it as an empty string, and hash that.
+ // `tile_data` values must be stored as a blob per MBTiles spec
+ // `md5` functions will fail if the value is not text/blob/null
+ //
+ // Note that ORDER BY controls the output ordering, which is important for the hash value,
+ // and having it at the top level would not order values properly.
+ // See https://sqlite.org/forum/forumpost/228bb96e12a746ce
+ "
+SELECT coalesce(
+ (SELECT md5_concat_hex(
+ cast(zoom_level AS text),
+ cast(tile_column AS text),
+ cast(tile_row AS text),
+ tile_data
+ )
+ OVER (ORDER BY zoom_level, tile_column, tile_row ROWS
+ BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
+ FROM tiles
+ LIMIT 1),
+ md5_hex('')
+);
+",
+ );
+ Ok(query.fetch_one(conn).await?.get::(0))
+}
+
#[cfg(test)]
pub(crate) mod tests {
use super::*;
@@ -499,38 +534,3 @@ pub(crate) mod tests {
Ok(())
}
}
-
-/// Compute the hash of the combined tiles in the mbtiles file tiles table/view.
-/// This should work on all mbtiles files perf `MBTiles` specification.
-pub async fn calc_agg_tiles_hash(conn: &mut T) -> MbtResult
-where
- for<'e> &'e mut T: SqliteExecutor<'e>,
-{
- debug!("Calculating agg_tiles_hash");
- let query = query(
- // The md5_concat func will return NULL if there are no rows in the tiles table.
- // For our use case, we will treat it as an empty string, and hash that.
- // `tile_data` values must be stored as a blob per MBTiles spec
- // `md5` functions will fail if the value is not text/blob/null
- //
- // Note that ORDER BY controls the output ordering, which is important for the hash value,
- // and having it at the top level would not order values properly.
- // See https://sqlite.org/forum/forumpost/228bb96e12a746ce
- "
-SELECT coalesce(
- (SELECT md5_concat_hex(
- cast(zoom_level AS text),
- cast(tile_column AS text),
- cast(tile_row AS text),
- tile_data
- )
- OVER (ORDER BY zoom_level, tile_column, tile_row ROWS
- BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
- FROM tiles
- LIMIT 1),
- md5_hex('')
-);
-",
- );
- Ok(query.fetch_one(conn).await?.get::(0))
-}