Skip to content

Commit 3774a11

Browse files
committed
It's alive\!
1 parent 90708d2 commit 3774a11

File tree

2 files changed

+52
-111
lines changed

2 files changed

+52
-111
lines changed

main.rkt

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,40 @@
22

33
(require (planet dvanhorn/fector:1:1))
44

5-
;(provide create-datastore)
6-
7-
; create datastore
8-
; create relation name (fields)
9-
; delete relation
10-
; create tuples ((x y z)(p d q))
11-
; read (x y) from relation where (u v)
12-
; update (x y) in relation where (u v)
13-
; delete from relation where (u v)
5+
(provide create-datastore)
146

157

168
(define (create-datastore (rs #f) (is #f))
179
(define relations (or rs (hash)))
1810
(define indexes (or is (hash)))
11+
(define (unroll-relations)
12+
(make-immutable-hash
13+
(map (λ (k) (cons k ((hash-ref relations k))))
14+
(hash-keys relations))))
1915
(define (serialize)
20-
(hash 'relations relations 'indexes indexes))
16+
(hash
17+
'relations (unroll-relations)
18+
'indexes indexes))
2119
(define (relvar name)
2220
(hash-ref relations name))
23-
(define (rebuild name fn)
21+
(define (rebuild name noob)
2422
(create-datastore
25-
(hash-set relations name (fn) indexes)))
26-
(define (add-relation name fields (tuples #f))
27-
(rebuild name (λ () (relation name fields tuples))))
23+
(hash-set relations name noob) indexes))
24+
(define (add-relation name fields (tuples empty))
25+
(rebuild name (relation name fields tuples)))
2826
(define (add-tuples relname tupz)
29-
(rebuild relname (λ () ((relvar relname) 'create tupz))))
27+
(rebuild relname ((relvar relname) 'create tupz)))
3028
(define (rm-tuples relname where)
31-
(rebuild relname (λ () ((relvar relname) 'delete where))))
29+
(rebuild relname ((relvar relname) 'delete where)))
3230
(define (update-tuples relname where put)
33-
(rebuild relname (λ () ((relvar relname) 'update where put))))
31+
(rebuild relname ((relvar relname) 'update where put)))
3432
(define (query result-type relname where want)
35-
(rebuild relname (λ () ((relvar relname) result-type where want))))
33+
((relvar relname) result-type where want))
3634
(case-lambda
3735
(() (serialize))
3836
((cmd)
3937
(case cmd
40-
('relations relations)
38+
('relations (unroll-relations))
4139
('indexes indexes)))
4240
((cmd x)
4341
(case cmd
@@ -50,7 +48,7 @@
5048
((cmd x y z)
5149
(case cmd
5250
('add_relation (add-relation x y z))
53-
('(read read-row read-col read-val) (query cmd x y z))
51+
((read read-row read-col read-val) (query cmd x y z))
5452
('update (update-tuples x y z))))))
5553

5654
(define (list->fector lst)

tests.rkt

Lines changed: 34 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -2,125 +2,68 @@
22

33
(require "main.rkt")
44

5-
; create datastore
6-
; delete datastore
7-
; create relation name (fields)
8-
; delete relation
9-
; create tuple (x y z)
10-
; read (x y) from relation where (u v)
11-
; update (x y) in relation where (u v)
12-
; delete from relation where (u v)
135

146
(define world (create-datastore))
157

16-
(world 'display)
8+
(world)
9+
10+
(define bfields '(id name brawn brains moves cool karma))
1711

1812
(define world2
1913
(world 'add_relation
2014
'brawlers
21-
'(id name brawn brains moves cool karma)))
15+
bfields))
2216

23-
(world2 'display)
17+
(world2)
2418

2519
(define world3
26-
(world 'add_tuples
27-
'brawlers
28-
'(1 "Jack Damage" 20 0 2 10 100)
29-
'(2 "Dark Okie" 18 3 14 7 100)
30-
'(3 "Grey Hound" 10 0 17 0 100)
31-
'(4 "Billy Gunn" 0 3 4 0 100)
32-
'(5 "Doctor Braino" 0 10 0 10 100)))
20+
(world2 'create 'brawlers
21+
'((1 "Jack Damage" 20 0 2 10 100)
22+
(2 "Dark Okie" 18 3 14 7 100)
23+
(3 "Grey Hound" 10 0 17 0 100)
24+
(4 "Billy Gunn" 0 3 4 0 100)
25+
(5 "Doctor Braino" 0 10 0 10 100))))
3326

34-
(world3 'display)
27+
(world3)
3528

3629
(define world4
37-
(world 'update
38-
'brawlers
39-
'((brawn 21) (brains 1))
40-
'((id 1))))
30+
(world3 'update 'brawlers
31+
'((id 1))
32+
'((brawn 21) (brains 1))))
4133

42-
(world4 'display)
34+
(world4)
4335

4436
(define brawlers
45-
(world 'get_relation 'brawlers))
46-
47-
(brawlers 'display)
48-
49-
(define jack
50-
(brawlers 'get_tuple '(('id 1)))
51-
52-
(jack 'display)
37+
(world4 'get_relation 'brawlers))
5338

54-
(define new-world (create-datastore (ds init)))
39+
(brawlers)
5540

41+
(define jack (car (brawlers 'read '((id 1)) '(name brawn brains moves cool karma))))
5642

57-
(define fields '(x y z p q))
58-
(define tf (tuple-factory fields))
59-
(define xyzpq (tf '(1 1 2 3 5)))
60-
61-
(newline)
62-
63-
(xyzpq)
64-
(xyzpq 'z)
65-
((xyzpq 'q 8))
66-
67-
(newline)
68-
69-
(define ts
70-
'((1 1 2 3 5)
71-
(8 13 21 34 55)
72-
(0 0 2 1 0)
73-
(1 1 1 1 1)
74-
(0 0 0 0 0)))
75-
76-
(define table (relation 'numbers fields ts))
43+
(displayln (jack 'cool))
7744

7845
(define (unroll xs)
7946
(map (λ (tup) (tup)) xs))
8047

81-
(table 'name)
82-
(table 'fields)
83-
84-
(unroll (table 'read '((x 0) (q 0)) '(y z p)))
85-
((table 'read-row '((p 3)) '(x y z)))
86-
(table 'read-val '((z 21)) '(q))
87-
8848
(unroll
89-
(table 'read
90-
(λ (tup)
91-
(let ((total (apply + (map tup (table 'fields)))))
92-
(or (= (tup 'z) 21) (and (> total 4) (< total 16)))))
93-
'(x y z p q)))
94-
95-
(newline)
96-
97-
(table)
98-
99-
(define table2 (table 'create '((8 6 7 5 3) (0 9 8 6 7) (5 3 0 9 9))))
100-
101-
(table2)
102-
103-
(define table3 (table2 'update '((x 0)) '((y 3))))
104-
105-
(table3)
106-
107-
(define table4 (table3 'update
108-
(λ (t) (> (apply + (map t (table3 'fields))) 10))
109-
(λ (t) (let ((xyz (map t '(x y z))))
110-
(append xyz (list (apply + xyz) (apply * xyz)))))))
111-
112-
(table4)
113-
114-
(define table5 (table4 'delete (λ (t) (> (apply + (map t (table4 'fields))) 100))))
115-
116-
(table5)
117-
118-
(define table6 (table5 'delete '((x 1))))
49+
(world4 'read 'brawlers
50+
(λ (tup) (> (tup 'brawn) 10))
51+
'(id name)))
11952

120-
(table6)
53+
(define world5
54+
(world4 'update 'brawlers
55+
(λ (t) (> (apply + (map t '(brawn brains moves cool))) 12))
56+
(λ (t) (map (t 'cool 37) bfields))))
12157

58+
(world5)
12259

60+
(define world6
61+
(world5 'delete 'brawlers
62+
(λ (t) (< (apply + (map t '(brawn moves))) 8))))
12363

64+
(world6)
12465

66+
(world6 'relations)
12567

68+
(world6 'indexes)
12669

0 commit comments

Comments
 (0)