Skip to content

Commit 860f676

Browse files
committed
rename
1 parent fd1f819 commit 860f676

7 files changed

Lines changed: 85 additions & 69 deletions

File tree

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: cule
1+
name: keten
22

33
on:
44
push:
File renamed without changes.

src/cule/schema.nim

Lines changed: 0 additions & 62 deletions
This file was deleted.
File renamed without changes.
Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ type RawRow* = seq[RawNimNode]
77

88
proc addRawRow*(id: SchemaId, row: RawRow) =
99
if isFrozen(id):
10-
raise newException(CuleFrozenError, "schema " & $id & " is frozen, no rows can be added")
10+
raise newException(FrozenError, "schema " & $id & " is frozen, no rows can be added")
1111
getSchemaData(id).add glaze(row)
1212

1313
macro defineRowAdd*(id: static SchemaId, name: untyped) =
@@ -20,16 +20,37 @@ macro defineRowAdd*(id: static SchemaId, name: untyped) =
2020
var params: seq[NimNode] = @[newEmptyNode()]
2121
var row = newNimNode(nnkBracket, name)
2222
for field in schema.fields:
23-
let typeNode = field.type.NimNode
23+
var typeNode = field.type.constraint.NimNode
24+
case field.type.kind
25+
of ExprAtom:
26+
if typeNode.isNil:
27+
typeNode = bindSym"untyped"
28+
of TypeAtom:
29+
if typeNode.isNil:
30+
typeNode = bindSym"typedesc"
31+
else:
32+
typeNode = newTree(nnkBracketExpr, bindSym"typedesc", typeNode)
33+
of StaticAtom:
34+
if typeNode.isNil:
35+
typeNode = bindSym"static"
36+
else:
37+
typeNode = newTree(nnkBracketExpr, bindSym"static", typeNode)
2438
let defaultNode = field.default.NimNode
2539
var def = newNimNode(nnkIdentDefs, typeNode)
2640
def.add ident(field.name)
27-
if typeNode.isNil: def.add newEmptyNode()
28-
else: def.add typeNode
41+
def.add typeNode
2942
if defaultNode.isNil: def.add newEmptyNode()
3043
else: def.add defaultNode
3144
params.add def
32-
row.add newCall(bindSym"RawNimNode", ident(field.name)) # XXX needs to be different for typedescs and statics
45+
var serializeNode = ident(field.name)
46+
case field.type.kind
47+
of ExprAtom: discard
48+
of TypeAtom:
49+
# maybe implement glaze for typedesc
50+
serializeNode = newCall(bindSym"getTypeInst", serializeNode)
51+
of StaticAtom:
52+
serializeNode = newCall(bindSym("glaze", brForceOpen), serializeNode)
53+
row.add newCall(bindSym"RawNimNode", serializeNode)
3354
result = newProc(
3455
procType = nnkMacroDef,
3556
name = name,

src/keten/schema.nim

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import glaze, std/macrocache
2+
3+
type
4+
AtomKind* = enum
5+
ExprAtom
6+
TypeAtom
7+
StaticAtom
8+
AtomType* = object
9+
case kind*: AtomKind
10+
of ExprAtom, TypeAtom, StaticAtom:
11+
constraint*: RawNimNode
12+
KetenField* = object
13+
# or "strand"
14+
column*: int
15+
name*: string
16+
`type`*: AtomType # can be untyped, typed, static, typedesc, or other typed node
17+
default*: RawNimNode
18+
KetenSchema* = object
19+
# or "fabric"
20+
fields*: seq[KetenField]
21+
22+
proc getColumn*(schema: KetenSchema, name: string): int =
23+
result = -1
24+
for i, field in schema.fields:
25+
if field.name == name:
26+
return i
27+
28+
proc toNode*(schema: KetenSchema): NimNode =
29+
glaze(schema)
30+
31+
proc toSchema*(node: NimNode): KetenSchema =
32+
deglaze(node, result)
33+
34+
type SchemaId* = string
35+
36+
const schemas* = CacheTable"keten.schemas"
37+
38+
proc addSchema*(id: SchemaId, schema: KetenSchema) =
39+
schemas[id] = toNode(schema)
40+
41+
proc getSchema*(id: SchemaId): KetenSchema =
42+
toSchema(schemas[id])
43+
44+
type FrozenError* = object of CatchableError
45+
46+
const freezes* = CacheTable"keten.freezes"
47+
48+
proc freeze*(id: SchemaId) {.compileTime.} =
49+
freezes[id] = glaze true
50+
51+
proc isFrozen*(id: SchemaId): bool {.compileTime.} =
52+
id in freezes and deglaze(freezes[id], bool)
53+
54+
proc getSchemaDataHandle*(id: SchemaId): string =
55+
"keten.data." & id
56+
57+
# maybe indexes?

tasks/build_docs.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ when not declared(buildDocs):
77
{.error: "docs task not implemented, need nimbleutils".}
88

99
# run from project root
10-
buildDocs(gitUrl = "https://github.com/holo-nim/cule")
10+
buildDocs(gitUrl = "https://github.com/holo-nim/keten")

0 commit comments

Comments
 (0)