@@ -4,7 +4,7 @@ use crate::store::{StoreFromConfig, TileReader, TileStore, TileStoreError, TileW
4
4
use async_trait:: async_trait;
5
5
use bbox_core:: { Compression , Format , TileResponse } ;
6
6
use log:: info;
7
- use martin_mbtiles:: { invert_y_value, CopyDuplicateMode , Metadata } ;
7
+ use martin_mbtiles:: { invert_y_value, Metadata } ;
8
8
use martin_tile_utils:: Format as TileFormat ;
9
9
use sqlx:: { Acquire , Executor , Statement } ;
10
10
use std:: ffi:: OsStr ;
@@ -81,14 +81,49 @@ impl TileWriter for MbtilesDatasource {
81
81
}
82
82
async fn put_tile ( & self , xyz : & Xyz , data : Vec < u8 > ) -> Result < ( ) , TileStoreError > {
83
83
let mut conn = self . pool . acquire ( ) . await ?;
84
- self . mbtiles
85
- . insert_tiles (
86
- & mut conn,
87
- self . layout ,
88
- CopyDuplicateMode :: Override ,
89
- & [ ( xyz. z , xyz. x as u32 , xyz. y as u32 , data) ] ,
84
+ // self.mbtiles
85
+ // .insert_tiles(
86
+ // &mut conn,
87
+ // self.layout,
88
+ // CopyDuplicateMode::Override,
89
+ // &[(xyz.z, xyz.x as u32, xyz.y as u32, data)],
90
+ // )
91
+ // .await?;
92
+ assert_eq ! (
93
+ self . layout,
94
+ martin_mbtiles:: MbtType :: Normalized { hash_view: true }
95
+ ) ;
96
+ // TODO: common code with put_tiles
97
+ let mut tx = conn. begin ( ) . await ?;
98
+ let sql2 = tx
99
+ . prepare (
100
+ "INSERT OR IGNORE INTO images (tile_id, tile_data)
101
+ VALUES (?1, ?2);" ,
90
102
)
91
103
. await ?;
104
+ let sql1 = tx
105
+ . prepare (
106
+ "INSERT OR REPLACE INTO map (zoom_level, tile_column, tile_row, tile_id)
107
+ VALUES (?1, ?2, ?3, ?4);" ,
108
+ )
109
+ . await ?;
110
+ let ( z, x, y, tile_data) = ( & xyz. z , & ( xyz. x as u32 ) , & ( xyz. y as u32 ) , & data) ;
111
+ let hash = blake3:: hash ( tile_data) . to_hex ( ) ;
112
+ sql2. query ( )
113
+ . bind ( hash. as_str ( ) )
114
+ . bind ( tile_data)
115
+ . execute ( & mut * tx)
116
+ . await ?;
117
+
118
+ let y = invert_y_value ( * z, * y) ;
119
+ sql1. query ( )
120
+ . bind ( z)
121
+ . bind ( x)
122
+ . bind ( y)
123
+ . bind ( hash. as_str ( ) )
124
+ . execute ( & mut * tx)
125
+ . await ?;
126
+ tx. commit ( ) . await ?;
92
127
Ok ( ( ) )
93
128
}
94
129
async fn put_tiles ( & mut self , tiles : & [ ( u8 , u32 , u32 , Vec < u8 > ) ] ) -> Result < ( ) , TileStoreError > {
0 commit comments