Merge branch 'master' of git://factorcode.org/git/factor

db4
Doug Coleman 2009-01-30 16:46:07 -06:00
commit e70bf1f313
5 changed files with 42 additions and 104 deletions

View File

@ -173,7 +173,7 @@ HELP: with-db
HELP: with-transaction HELP: with-transaction
{ $values { $values
{ "quot" quotation } } { "quot" quotation } }
{ $description "" } ; { $description "Calls the quotation inside a database transaction and commits the result to the database after the quotation finishes. If the quotation throws an error, the transaction is aborted." } ;
ARTICLE: "db" "Database library" ARTICLE: "db" "Database library"
"Accessing a database:" "Accessing a database:"

View File

@ -1,7 +1,7 @@
! Copyright (C) 2008 Doug Coleman. ! Copyright (C) 2008 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: classes hashtables help.markup help.syntax io.streams.string USING: classes hashtables help.markup help.syntax io.streams.string
kernel sequences strings math ; kernel sequences strings math db.tuples db.tuples.private ;
IN: db.types IN: db.types
HELP: +db-assigned-id+ HELP: +db-assigned-id+
@ -27,15 +27,11 @@ HELP: +user-assigned-id+
HELP: <generator-bind> HELP: <generator-bind>
{ $values { "slot-name" object } { "key" object } { "generator-singleton" object } { "type" object } { "generator-bind" generator-bind } } { $values { "slot-name" object } { "key" object } { "generator-singleton" object } { "type" object } { "generator-bind" generator-bind } }
{ $description "" } ; { $description "An internal constructor for creating objects containing parameters used for binding generated values to a tuple query." } ;
HELP: <literal-bind> HELP: <literal-bind>
{ $values { "key" object } { "type" object } { "value" object } { "literal-bind" literal-bind } } { $values { "key" object } { "type" object } { "value" object } { "literal-bind" literal-bind } }
{ $description "" } ; { $description "An internal constructor for creating objects containing parameters used for binding literal values to a tuple query." } ;
HELP: <low-level-binding>
{ $values { "value" object } { "low-level-binding" low-level-binding } }
{ $description "" } ;
HELP: BIG-INTEGER HELP: BIG-INTEGER
{ $description "A 64-bit integer. Whether this number is signed or unsigned depends on the database backend." } ; { $description "A 64-bit integer. Whether this number is signed or unsigned depends on the database backend." } ;
@ -100,18 +96,12 @@ HELP: user-assigned-id-spec?
HELP: bind# HELP: bind#
{ $values { $values
{ "spec" "a sql spec" } { "obj" object } } { "spec" "a sql spec" } { "obj" object } }
{ $description "" } ; { $description "A generic word that lets a database construct a literal binding." } ;
HELP: bind% HELP: bind%
{ $values { $values
{ "spec" "a sql spec" } } { "spec" "a sql spec" } }
{ $description "" } ; { $description "A generic word that lets a database output a binding." } ;
HELP: compound
{ $values
{ "string" string } { "obj" object }
{ "hash" hashtable } }
{ $description "" } ;
HELP: db-assigned-id-spec? HELP: db-assigned-id-spec?
{ $values { $values
@ -126,45 +116,12 @@ HELP: find-primary-key
{ $description "Returns the rows from the sql-specs array that are part of the primary key. Composite primary keys are supported, so this word must return a sequence." } { $description "Returns the rows from the sql-specs array that are part of the primary key. Composite primary keys are supported, so this word must return a sequence." }
{ $notes "This is a low-level word." } ; { $notes "This is a low-level word." } ;
HELP: generator-bind
{ $description "" } ;
HELP: get-slot-named HELP: get-slot-named
{ $values { $values
{ "name" "a slot name" } { "tuple" tuple } { "name" "a slot name" } { "tuple" tuple }
{ "value" "the value stored in the slot" } } { "value" "the value stored in the slot" } }
{ $description "Returns the value stored in a tuple slot, where the tuple slot is a string." } ; { $description "Returns the value stored in a tuple slot, where the tuple slot is a string." } ;
HELP: literal-bind
{ $description "" } ;
HELP: lookup-create-type
{ $values
{ "obj" object }
{ "string" string } }
{ $description "" } ;
HELP: lookup-modifier
{ $values
{ "obj" object }
{ "string" string } }
{ $description "" } ;
HELP: lookup-type
{ $values
{ "obj" object }
{ "string" string } }
{ $description "" } ;
HELP: low-level-binding
{ $description "" } ;
HELP: modifiers
{ $values
{ "spec" "a sql spec" }
{ "string" string } }
{ $description "" } ;
HELP: no-sql-type HELP: no-sql-type
{ $values { $values
{ "type" "a sql type" } } { "type" "a sql type" } }
@ -173,7 +130,7 @@ HELP: no-sql-type
HELP: normalize-spec HELP: normalize-spec
{ $values { $values
{ "spec" "a sql spec" } } { "spec" "a sql spec" } }
{ $description "" } ; { $description "Normalizes a sql spec." } ;
HELP: offset-of-slot HELP: offset-of-slot
{ $values { $values
@ -181,52 +138,20 @@ HELP: offset-of-slot
{ "n" integer } } { "n" integer } }
{ $description "Returns the offset of a tuple slot accessed by name." } ; { $description "Returns the offset of a tuple slot accessed by name." } ;
HELP: persistent-table
{ $values
{ "hash" hashtable } }
{ $description "" } ;
HELP: primary-key? HELP: primary-key?
{ $values { $values
{ "spec" "a sql spec" } { "spec" "a sql spec" }
{ "?" "a boolean" } } { "?" "a boolean" } }
{ $description "" } ; { $description "Returns true if a sql spec is a primary key." } ;
HELP: random-id-generator HELP: random-id-generator
{ $description "" } ; { $description "Used to tell " { $link eval-generator } " to generate a random number for use as a key." } ;
HELP: relation? HELP: relation?
{ $values { $values
{ "spec" "a sql spec" } { "spec" "a sql spec" }
{ "?" "a boolean" } } { "?" "a boolean" } }
{ $description "" } ; { $description "Returns true if a sql spec is a relation." } ;
HELP: remove-db-assigned-id
{ $values
{ "specs" "a sequence of sql specs" }
{ "obj" object } }
{ $description "" } ;
HELP: remove-id
{ $values
{ "specs" "a sequence of sql specs" }
{ "obj" object } }
{ $description "" } ;
HELP: set-slot-named
{ $values
{ "value" object } { "name" string } { "obj" object } }
{ $description "" } ;
HELP: spec>tuple
{ $values
{ "class" class } { "spec" "a sql spec" }
{ "tuple" tuple } }
{ $description "" } ;
HELP: sql-spec
{ $description "" } ;
HELP: unknown-modifier HELP: unknown-modifier
{ $values { "modifier" string } } { $values { "modifier" string } }

View File

@ -23,6 +23,8 @@ HELP: printf
{ "%+P.Df" "Fixed format" "fixnum, float" } { "%+P.Df" "Fixed format" "fixnum, float" }
{ "%+Px" "Hexadecimal" "hex" } { "%+Px" "Hexadecimal" "hex" }
{ "%+PX" "Hexadecimal uppercase" "hex" } { "%+PX" "Hexadecimal uppercase" "hex" }
{ "%[%?, %]" "Sequence format" "sequence" }
{ "%[%?: %? %]" "Assocs format" "assocs" }
} }
$nl $nl
"A plus sign ('+') is used to optionally specify that the number should be " "A plus sign ('+') is used to optionally specify that the number should be "
@ -72,6 +74,14 @@ HELP: printf
"USING: formatting ;" "USING: formatting ;"
"1234 \"%+d\" printf" "1234 \"%+d\" printf"
"+1234" } "+1234" }
{ $example
"USING: formatting ;"
"{ 1 2 3 } \"%[%d, %]\" printf"
"{ 1, 2, 3 }" }
{ $example
"USING: formatting ;"
"H{ { 1 2 } { 3 4 } } \"%[%d: %d %]\" printf"
"{ 1:2, 3:4 }" }
} ; } ;
HELP: sprintf HELP: sprintf

View File

@ -1,7 +1,7 @@
! Copyright (C) 2008 John Benediktsson ! Copyright (C) 2008 John Benediktsson
! See http://factorcode.org/license.txt for BSD license ! See http://factorcode.org/license.txt for BSD license
USING: accessors arrays ascii calendar combinators fry kernel USING: accessors arrays ascii assocs calendar combinators fry kernel
generalizations io io.encodings.ascii io.files io.streams.string generalizations io io.encodings.ascii io.files io.streams.string
macros math math.functions math.parser peg.ebnf quotations macros math math.functions math.parser peg.ebnf quotations
sequences splitting strings unicode.case vectors ; sequences splitting strings unicode.case vectors ;
@ -75,8 +75,8 @@ digits = (digits_)? => [[ 6 or ]]
fmt-% = "%" => [[ [ "%" ] ]] fmt-% = "%" => [[ [ "%" ] ]]
fmt-c = "c" => [[ [ 1string ] ]] fmt-c = "c" => [[ [ 1string ] ]]
fmt-C = "C" => [[ [ 1string >upper ] ]] fmt-C = "C" => [[ [ 1string >upper ] ]]
fmt-s = "s" => [[ [ ] ]] fmt-s = "s" => [[ [ dup number? [ number>string ] when ] ]]
fmt-S = "S" => [[ [ >upper ] ]] fmt-S = "S" => [[ [ dup number? [ number>string ] when >upper ] ]]
fmt-d = "d" => [[ [ >fixnum number>string ] ]] fmt-d = "d" => [[ [ >fixnum number>string ] ]]
fmt-e = digits "e" => [[ first '[ >exp _ exp>string ] ]] fmt-e = digits "e" => [[ first '[ >exp _ exp>string ] ]]
fmt-E = digits "E" => [[ first '[ >exp _ exp>string >upper ] ]] fmt-E = digits "E" => [[ first '[ >exp _ exp>string >upper ] ]]
@ -91,7 +91,13 @@ strings = pad width strings_ => [[ reverse compose-all ]]
numbers_ = fmt-d|fmt-e|fmt-E|fmt-f|fmt-x|fmt-X numbers_ = fmt-d|fmt-e|fmt-E|fmt-f|fmt-x|fmt-X
numbers = sign pad numbers_ => [[ unclip-last prefix compose-all [ fix-sign ] append ]] numbers = sign pad numbers_ => [[ unclip-last prefix compose-all [ fix-sign ] append ]]
formats = "%" (strings|numbers|fmt-%|unknown) => [[ second '[ _ dip ] ]] types = strings|numbers
lists = "[%" types ", %]" => [[ second '[ _ map ", " join "{ " prepend " }" append ] ]]
assocs = "[%" types ": %" types " %]" => [[ [ second ] [ fourth ] bi '[ unzip [ _ map ] dip _ map zip [ ":" join ] map ", " join "{ " prepend " }" append ] ]]
formats = "%" (types|fmt-%|lists|assocs|unknown) => [[ second '[ _ dip ] ]]
plain-text = (!("%").)+ => [[ >string '[ _ swap ] ]] plain-text = (!("%").)+ => [[ >string '[ _ swap ] ]]

View File

@ -52,13 +52,10 @@ IN: uuid
: string>uuid ( string -- n ) : string>uuid ( string -- n )
[ CHAR: - = not ] filter 16 base> ; [ CHAR: - = not ] filter 16 base> ;
: uuid>byte-array ( n -- byte-array )
16 >be ;
PRIVATE> PRIVATE>
: uuid-parse ( string -- byte-array ) : uuid-parse ( string -- byte-array )
string>uuid uuid>byte-array ; string>uuid 16 >be ;
: uuid-unparse ( byte-array -- string ) : uuid-unparse ( byte-array -- string )
be> uuid>string ; be> uuid>string ;