diff options
| author | 2012-12-29 17:10:12 +0100 | |
|---|---|---|
| committer | 2012-12-29 17:10:12 +0100 | |
| commit | 3820e6599232f84aec978fa99cc814028e2df65e (patch) | |
| tree | e819d5dcb5eb7f53f8bba4f1f1d5d774f4281b12 /src/convert.scm | |
| parent | b46793938598358a9ab5249bd97e8999d5ac67e6 (diff) | |
| download | markam-3820e6599232f84aec978fa99cc814028e2df65e.tar.gz markam-3820e6599232f84aec978fa99cc814028e2df65e.zip | |
Rename convert to markam-convert0.1.0
Diffstat (limited to 'src/convert.scm')
| -rw-r--r-- | src/convert.scm | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/src/convert.scm b/src/convert.scm deleted file mode 100644 index 199a2a5..0000000 --- a/src/convert.scm +++ /dev/null @@ -1,112 +0,0 @@ -;;; markam -- Store/retrieve/manage bookmarks -;; Copyright (C) 2012 Tom Willemsen <tom at ryuslash dot org> - -;; This program is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see <http://www.gnu.org/licenses/>. - -;;; Commentary: - -;; Convert any old database file to one usable with this version of -;; markam. If you're just starting to use markam there should be -;; no need to use this. - -;;; Code: - -(declare (uses paths - common)) - -(require-extension sqlite3) -(require-library srfi-4) - -(define (blob->seconds blob) - ;; Convert BLOB to an integer representing the seconds since - ;; 01-01-1970 (standard unix timstamp). This has to be done because - ;; in the previous version of markam I stored the timestamp as a - ;; blob and CHICKEN doesn't seem to like blobs much. - (if (u32vector? blob) - (u32vector-ref (blob->u32vector blob) 0) - 0)) - -(define (convert-table db name converter #!optional select) - ;; Convert NAME from DB using CONVERTER for each specific row. The - ;; optional SELECT should be an SQL query that will be used to fetch - ;; the rows to convert. - (let ((count (first-result db (string-append "SELECT COUNT(*) FROM " name))) - (progress 0)) - (for-each-row (lambda args - (apply converter args) - (set! progress (+ progress 1)) - (format #t "Converted ~s of ~s ~a rows\r~!" progress count name)) - db (or select (string-append "SELECT * FROM " name))) - (newline))) - -(define (convert) - ;; Convert an old database into a new one and then replace the old - ;; with the new. - (let ((old-db (open-database (data-file "linkwave.db" "linkwave"))) - (new-db (open-database (data-file "markam.db")))) - (execute new-db "CREATE TABLE bookmark (url VARCHAR(255) UNIQUE, date INTEGER, name VARCHAR(255), description TEXT)") - (execute new-db "CREATE TABLE tag (name VARCHAR(255) UNIQUE)") - (execute new-db "CREATE TABLE bookmark_tag (bookmark_id INTEGER REFERENCES bookmark(rowid), tag_id INTEGER REFERENCES tag(rowid), PRIMARY KEY (bookmark_id, tag_id))") - - (convert-table old-db "bookmark" - (lambda (url dateblob name description) - (execute new-db "INSERT INTO bookmark VALUES (?, ?, ?, ?)" - url (blob->seconds dateblob) name description))) - - (convert-table old-db "tag" - (lambda (name) - (execute new-db "INSERT INTO tag VALUES (?)" name))) - - (convert-table old-db "bookmark_tag" - (lambda (url tag) - (execute new-db "INSERT INTO bookmark_tag VALUES (?, ?)" - (first-result new-db "SELECT rowid FROM bookmark WHERE url = ?" url) - (first-result new-db "SELECT rowid FROM tag WHERE name = ?" tag))) - "SELECT url, name FROM bookmark_tag JOIN tag ON (tag_id = tag.rowid)") - - (format #t "Database converted.~%"))) - -(define (display-help) - ;; Display markam's help message. - (format #t (string-append - "Usage: convert [options]...~%" - "~%" - "Possible options:~%" - "~%" - "--help, -h Display this help and exit~%" - "--version, -v Output version information and exit~%"))) - -(define (main args) - ;; Convert an old database file unless a conversion database already - ;; exists. - (if (null? args) - (if (file-exists? (data-file "markam.db")) - (format #t (string-append "Converted database already exists, or something may have gone " - "wrong during the last run~%")) - (convert)) - (do ((arg (car args) (and (not (null? args)) - (car args)))) - ((or (null? arg) (not arg))) - (cond - ((or (string= arg "-v") (string= arg "--version")) - (display-version) - (exit 0)) - ((or (string= arg "-h") (string= arg "--help")) - (display-help) - (exit 0)) - (else - (format #t "Unrecognized option: ~a~%" (car args)))) - (set! args (cdr args))))) - -(main (command-line-arguments)) |
