diff options
-rw-r--r-- | ebus-racket/db.rkt (renamed from ebus-racket/db.plt) | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/ebus-racket/db.plt b/ebus-racket/db.rkt index 050eafe..14817e5 100644 --- a/ebus-racket/db.plt +++ b/ebus-racket/db.rkt @@ -7,16 +7,31 @@ #:password "ebus" #:server "10.2.2.26")) +;; Query ID of sensor given by sensor-name +;; Returns null if sensor is undefined +(define (get-sensor-id sensor-name) + (with-handlers ([exn:fail? (lambda (exn) (void))]) + (db:query-value pgc "SELECT id FROM sensor WHERE name = $1" sensor-name))) -(define (query-sensor-id sensor-name) - (db:query-value pgc "select id from sensor where name = $1" sensor-name)) +;; Create Sensor-ID with given name +;; returns id +(define (create-sensor-id sensor-name) + (db:query-exec "INSERT INTO sensor(name) VALUES ($1)" sensor-name) + (get-sensor-id sensor-name)) + +;; Get ID of sensor given by sensor-name +;; define sensor if needed +(define (sensor-id sensor-name) + (let ([id (get-sensor-id sensor-name)]) + (cond ((void? id) (create-sensor-id sensor-id)) + (else id)))) (define (insert sensor-name value-float value-int value-string) - (let ([sensor-id (query-sensor-id sensor-name)] + (let ([sensor-id (sensor-id sensor-name)] [type (cond ((not (void? value-string)) "string") ((not (void? value-float)) "float") ((not (void? value-int)) "int"))]) (db:query-exec (string-append "INSERT INTO value(timestamp, sensor_id, type, value_float, value_int, value_string) " "VALUES (now(), $1, $2, $3, $4, $5)") sensor-id type value-float value-int value-string))) - ;(db:query-exec pgc "select
\ No newline at end of file + |