Table creation/Postal addresses: Difference between revisions

Content added Content deleted
m (→‎{{header|REXX}}: changed indentation, comments. -- ~~~~)
Line 474: Line 474:
<sqlite3.Cursor object at 0x013265C0>
<sqlite3.Cursor object at 0x013265C0>
>>> </lang>
>>> </lang>

=={{header|Racket}}==

Racket supports a bunch of DBs, this is using sqlite, which is almost always available. Also included some further demonstrations beyond just the table creation:

<lang Racket>
#lang at-exp racket

(require db)
(define postal (sqlite3-connect #:database "/tmp/postal.db" #:mode 'create))

(define (add! name street city state zip)
(query-exec postal
@~a{INSERT INTO addresses (name, street, city, state, zip)
VALUES (?, ?, ?, ?, ?)}
name street city state zip))

(unless (table-exists? postal "addresses")
(query-exec postal
@~a{CREATE TABLE addresses(
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
street TEXT NOT NULL,
city TEXT NOT NULL,
state TEXT NOT NULL,
zip TEXT NOT NULL)}))

(add! "FSF Inc."
"51 Franklin St"
"Boston"
"MA"
"02110-1301")
(add! "The White House"
"1600 Pennsylvania Avenue NW"
"Washington"
"DC"
"20500")
(add! "National Security Council"
"1700 Pennsylvania Avenue NW"
"Washington"
"DC"
"20500")

(printf "Addresses:\n")
(for ([r (query-rows postal "SELECT * FROM addresses")])
(printf " ~a.\n" (string-join (cdr (vector->list r)) ", ")))
(newline)

(printf "By State+ZIP:\n")
(for ([z (query-rows postal "SELECT * FROM addresses"
#:group #("state" "zip"))])
(printf " ~a, ~a:\n" (vector-ref z 0) (vector-ref z 1))
(for ([r (vector-ref z 2)])
(printf " ~a.\n" (string-join (cdr (vector->list r)) ", "))))

(disconnect postal)
</lang>

Output:
<pre>
Addresses:
FSF Inc., 51 Franklin St, Boston, MA, 02110-1301.
The White House, 1600 Pennsylvania Avenue NW, Washington, DC, 20500.
National Security Council, 1700 Pennsylvania Avenue NW, Washington, DC, 20500.

By State+ZIP:
MA, 02110-1301:
FSF Inc., 51 Franklin St, Boston.
DC, 20500:
The White House, 1600 Pennsylvania Avenue NW, Washington.
National Security Council, 1700 Pennsylvania Avenue NW, Washington.
</pre>


=={{header|REXX}}==
=={{header|REXX}}==