|
145 | 145 | :border-radius :0.15em |
146 | 146 | :border "0.15em solid currentColor" |
147 | 147 | :padding :5px}]]))) |
148 | | - |
149 | 148 | (defn get-tab-state [db sid tabid] |
150 | | - (-> (d/q db {:select [:state] |
151 | | - :from :tab |
152 | | - :where [:and [:= :sid sid] [:= :tabid tabid]]}) |
| 149 | + (-> (d/q db ["SELECT state FROM tab WHERE (sid = ?) AND (tabid = ?)" |
| 150 | + sid tabid]) |
153 | 151 | first)) |
154 | 152 |
|
155 | 153 | (defn update-tab-state! [db sid tabid update-fn] |
156 | 154 | (let [old-state (get-tab-state db sid tabid) |
157 | 155 | new-state (update-fn old-state)] |
158 | 156 | (if old-state |
159 | | - (d/q db {:update :tab |
160 | | - :set {:state [:lift new-state]} |
161 | | - :where [:and [:= :sid sid] [:= :tabid tabid]]}) |
162 | | - (d/q db {:insert-into :tab |
163 | | - :values [{:sid sid |
164 | | - :tabid tabid |
165 | | - :state [:lift (assoc new-state |
166 | | - :sid sid |
167 | | - :tabid tabid)]}]})))) |
| 157 | + (d/q db |
| 158 | + ["UPDATE tab SET state = ? WHERE (sid = ?) AND (tabid = ?)" |
| 159 | + new-state sid tabid]) |
| 160 | + (d/q db |
| 161 | + ["INSERT INTO tab (sid, tabid, state) VALUES (?, ?, ?)" |
| 162 | + sid |
| 163 | + tabid |
| 164 | + (assoc new-state |
| 165 | + :sid sid |
| 166 | + :tabid tabid)])))) |
168 | 167 |
|
169 | 168 | (defn update-chunk! [db chunk-cache chunk-id update-fn] |
170 | 169 | (let [old-chunk (or (@chunk-cache chunk-id) |
171 | | - (-> (d/q db {:select [:chunk] |
172 | | - :from :chunk |
173 | | - :where [:= :id chunk-id]}) |
| 170 | + (-> (d/q db |
| 171 | + ["SELECT chunk FROM chunk WHERE id = ?" chunk-id]) |
174 | 172 | first)) |
175 | 173 | new-chunk (update-fn old-chunk)] |
176 | 174 | (swap! chunk-cache assoc chunk-id new-chunk))) |
|
286 | 284 |
|
287 | 285 | (defn UserView [{:keys [x y sid] :or {x 0 y 0}} db] |
288 | 286 | (->> (d/q db |
289 | | - {:select [:id :chunk] |
290 | | - :from :chunk |
291 | | - :where [:in :id (xy->chunk-ids x y)]}) |
| 287 | + (into ["SELECT id, chunk FROM chunk WHERE id IN (?, ?, ?, ?, ?, ?, ?, ?, ?)"] |
| 288 | + (xy->chunk-ids x y))) |
292 | 289 | (mapv (fn [[id chunk]] |
293 | 290 | (Chunk id chunk sid))))) |
294 | 291 |
|
|
359 | 356 | " and " |
360 | 357 | [:a {:href "https://data-star.dev"} "Datastar"] |
361 | 358 | " - " |
362 | | - [:a {:href "https://github.com/andersmurphy/hyperlith/blob/master/examples/billion_cells/src/app/main.clj" } "source"]]]))) |
| 359 | + [:a {:href "https://github.com/andersmurphy/hyperlith/blob/master/examples/billion_cells/src/app/main.clj" } "source"] |
| 360 | + " - " |
| 361 | + [:a {:href "https://checkboxes.andersmurphy.com"} " more like this"]]]))) |
363 | 362 |
|
364 | 363 | (def blank-chunk |
365 | 364 | (-> (repeat (* chunk-size chunk-size) {}) |
|
391 | 390 | (when-not (d/q db {:select [:id] :from :chunk :limit 1}) |
392 | 391 | (initial-board-db-state! db))) |
393 | 392 |
|
| 393 | +(d/format-query |
| 394 | + (let [sid 1 tabid 2 new-state {} chunk-id 3 foo [1 2 3 4 5 6 7 8 9] |
| 395 | + new-chunk {}] |
| 396 | + {:update :chunk |
| 397 | + :set {:chunk [:lift new-chunk]} |
| 398 | + :where [:= :id chunk-id]})) |
| 399 | + |
| 400 | + |
394 | 401 | (defn ctx-start [] |
395 | 402 | (let [{:keys [writer reader]} |
396 | 403 | (d/init-db! "database-new.db" |
|
409 | 416 | (run! (fn [thunk] (thunk db chunk-cache)) thunks) |
410 | 417 | (run! (fn [[chunk-id new-chunk]] |
411 | 418 | (d/q db |
412 | | - {:update :chunk |
413 | | - :set {:chunk [:lift new-chunk]} |
414 | | - :where [:= :id chunk-id]})) |
| 419 | + ["UPDATE chunk SET chunk = ? WHERE id = ?" |
| 420 | + new-chunk chunk-id])) |
415 | 421 | @chunk-cache))) |
416 | 422 | (h/refresh-all!)) |
417 | 423 | {:run-every-ms 100})})) |
|
0 commit comments