Table creation: Difference between revisions

Content added Content deleted
m (syntax highlighting fixup automation)
(→‎{{header|Wren}}: Added a second version based on the new Wren-table module.)
Line 1,149: Line 1,149:


=={{header|Wren}}==
=={{header|Wren}}==
===Version 1===
{{libheader|Wren-dynamic}}
{{libheader|Wren-dynamic}}
{{libheader|Wren-fmt}}
{{libheader|Wren-fmt}}
Line 1,155: Line 1,156:


In practice, a binary search would be needed to find records quickly by key given that the records are being maintained in sorted order. However, for now we use a sequential search instead.
In practice, a binary search would be needed to find records quickly by key given that the records are being maintained in sorted order. However, for now we use a sequential search instead.
<syntaxhighlight lang="ecmascript">import "/dynamic" for Enum, Tuple
<syntaxhighlight lang="ecmascript">import "./dynamic" for Enum, Tuple
import "/fmt" for Fmt
import "./fmt" for Fmt
import "/sort" for Cmp, Sort
import "./sort" for Cmp, Sort


var FieldType = Enum.create("FieldType", ["text", "num", "int", "bool"])
var FieldType = Enum.create("FieldType", ["text", "num", "int", "bool"])
Line 1,299: Line 1,300:
2 2006-03-28 BUY IBM 1000 45.00 true
2 2006-03-28 BUY IBM 1000 45.00 true
4 2006-04-05 BUY MSOFT 1000 72.00 false
4 2006-04-05 BUY MSOFT 1000 72.00 false
</pre>
<br>
===Version 2===
{{libheader|Wren-table}}
The above module provides a more generic way to create simple databases and was not available when the first version was written.
<syntaxhighlight lang="ecmascript">import "./table" for FieldInfo, Table, Records

var fields = [
FieldInfo.new("id", Num),
FieldInfo.new("date", String),
FieldInfo.new("trans", String),
FieldInfo.new("sym", String),
FieldInfo.new("qty", Num),
FieldInfo.new("price", Num),
FieldInfo.new("settled", Bool)
]

// create table
var table = Table.new("Stock_transactions", fields)

// add records
table.add([3, "2006-04-06", "SELL", "IBM" , 500, 53.00, true ])
table.add([1, "2006-01-05", "BUY" , "RHAT" , 100, 35.14, true ])
table.add([4, "2006-04-05", "BUY" , "MSOFT", 1000, 72.00, false])
table.add([2, "2006-03-28", "BUY" , "IBM" , 1000, 45.00, true ])

var colWidths = [2, 10, 4, 5, 4, 5.2, 7] // for listings

// show the table's fields
table.listFields()
System.print()

// sort the records by 'id' and show them
var sortFn = Fn.new { |s, t| s[0] < t[0] }
var records = table.sortedRecords(sortFn)
Records.list(table.fields, records, "Records for %(table.name) table:\n", colWidths)

// find a record by key
System.print("\nThe record with an id of 2 is:")
System.print(table.find(2))

// delete a record by key
table.remove(3)
System.print("\nThe record with an id of 3 will be deleted, leaving:\n")
records = table.sortedRecords(sortFn)
Records.list(table.fields, records, "Records for %(table.name) table:\n", colWidths)</syntaxhighlight>

{{out}}
<pre>
Fields for Stock_transactions table:

name kind
------- ------
id Num
date String
trans String
sym String
qty Num
price Num
settled Bool

Records for Stock_transactions table:

id date tran sym qty price settled
-- ---------- ---- ----- ---- ----- -------
1 2006-01-05 BUY RHAT 100 35.14 true
2 2006-03-28 BUY IBM 1000 45.00 true
3 2006-04-06 SELL IBM 500 53.00 true
4 2006-04-05 BUY MSOFT 1000 72.00 false

The record with an id of 2 is:
[2, 2006-03-28, BUY, IBM, 1000, 45, true]

The record with an id of 3 will be deleted, leaving:

Records for Stock_transactions table:

id date tran sym qty price settled
-- ---------- ---- ----- ---- ----- -------
1 2006-01-05 BUY RHAT 100 35.14 true
2 2006-03-28 BUY IBM 1000 45.00 true
4 2006-04-05 BUY MSOFT 1000 72.00 false
</pre>
</pre>