Skip to content

Commit 8025321

Browse files
committed
changing from node app tp clojure
1 parent eaff46d commit 8025321

8 files changed

Lines changed: 136 additions & 5 deletions

File tree

.classpath

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<classpath>
3+
<classpathentry kind="src" path="functionalDB/src"/>
4+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
5+
<classpathentry kind="output" path="functionalDB/bin"/>
6+
</classpath>

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ functionalDB/node_modules
66

77
*.pyc
88

9+
/bin

functionalDB/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/bin

functionalDB/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Jsomic
2+
3+
Jsomic is an in-memory, no-sql functional database, written in Javascript.
4+
5+
It is a modest attempt to provide part of the functionality that the Datomic database provides (the main omitted functionality is the durability part).

functionalDB/public/stylesheets/.gitignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

functionalDB/routes/.gitignore

Lines changed: 0 additions & 2 deletions
This file was deleted.

functionalDB/src/core/fdb.clj

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
(ns core.fdb)
2+
3+
(defrecord Entity [e_id name attrs])
4+
(defrecord Attr [name type value ts prev-ts])
5+
6+
7+
(defn make-entity [name] (Entity. (keyword name) name {}))
8+
(defn make-attr[name val type] (Attr. name type val -1 -1))
9+
(defn add-attr[ ent attr] (assoc-in ent [:attrs (keyword (:name attr))] attr))
10+
11+
;(defn update-creation-ts [ent ts]
12+
; (let ks [k])
13+
;
14+
;
15+
; )
16+
17+
(defn add-entity[db ent] (let [
18+
ts-mp (last (:timestamped db))
19+
new-eavt (assoc (:EAVT ts-mp) (:e_id ent) ent)
20+
new-avet (:AVET ts-mp)
21+
new-ts (assoc ts-mp :AVET new-avet :EAVT new-eavt )]
22+
(assoc db :timestamped (conj (:timestamped db) new-ts))
23+
))
24+
25+
(defn make-db[]
26+
(atom {:timestamped [{:EAVT {} :AVET {}}]
27+
:topId 0
28+
:curr-time 0
29+
}
30+
)
31+
)
32+
33+
34+
35+
(def db1 (make-db))
36+
37+
38+
(def en (make-entity "hotel"))
39+
40+
(add-attr en (make-attr "room" 12 :number))
41+
42+
(swap! db1 add-entity en)
43+
44+
45+
46+
47+
48+
49+
50+
(defn recent-ts-val [db](last (:timestamped db)))
51+
52+
53+
;(defn update-ts-with-EAV [ts &[e a v] :as more]
54+
; (let[eavt (:EAVT ts)]
55+
; (assoc-in ts :EAVT e a v)
56+
; )
57+
; )
58+
59+
;(defn _add-timestamp[db & more]
60+
; (let [ ts {:EAVT (:EAVT (recent-ts-val db))}]
61+
; (update-ts-with-EAV ts more)
62+
;
63+
; (assoc db :timestamped (conj (:timestamped db) ts))
64+
; )
65+
; )
66+
67+
68+
69+
@db1
70+
71+
;(swap! db1 _add-timestamp)
72+
73+
;@db1
74+
75+
76+
77+
78+
(defn next-id [db] (let [curr (@db :curr-time)]
79+
(swap! db assoc :curr-time (inc curr))
80+
curr))
81+
82+
83+
(defn make-entity[db name] (Entity. (db :curr-time) name))
84+
85+
(defn add-entity [db ent]
86+
(let [
87+
timestamped-vec (:timestamped db)
88+
eavt-map (:EAVT (recent-ts-val db))
89+
]
90+
(assoc db :timestamped (conj timestamped-vec {:EAVT
91+
(assoc eavt-map (keyword (:name ent)) ent)} ) )
92+
)
93+
)
94+
95+
96+
@db1
97+
(add-entity @db1
98+
(make-entity @db1 "person")
99+
)
100+
;(add-attr @db1 "name" :string "Jim" )
101+
; (add-attr @db1 "sur-name" :string "Doe" )
102+
; (add-attr @db1 "age-name" :number 39 )
103+
104+
105+
106+
107+
108+
109+
110+
111+
(next-id db1)
112+
(next-id db1)
113+
;db
114+
(defn fact[n]
115+
(if (<= n 0) 1
116+
(* n (fact (dec n)))
117+
)
118+
119+
)
120+
121+
(fact 1)
122+
123+
;(swap! db assoc :6 5

functionalDB/views/.gitignore

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)