1
0
Fork 0
forked from fun/fun
fun/examples/external/sqlite/sqlited/client.fun

142 lines
2.3 KiB
Standard ML
Executable file

#!/usr/bin/env fun
/*
* This file is part of the Fun programming language.
* https://fun-lang.xyz/
*
* Copyright 2026 Johannes Findeisen <you@hanez.org>
* Licensed under the terms of the Apache-2.0 license.
* https://opensource.org/license/apache-2-0
*
* Added: 2026-01-19
*/
// Simple TCP SQL client for Fun
// Connects to host:port, sends a single-line SQL (from CLI args or default),
// prints the server response, and exits.
// Run the server:
// FUN_LIB_DIR="$(pwd)/lib" ./build/fun ./examples/sqlited/server.fun 127.0.0.1 5555
// Run the client:
// FUN_LIB_DIR="$(pwd)/lib" ./build/fun --repl-on-error ./examples/sqlited/client.fun 127.0.0.1 5555 "SELECT * FROM tasks"
#include <cli.fun>
fun arg_or_default(args, i, d)
if (len(args) > i)
return args[i]
else
return d
fun read_all(fd)
buf = ""
while (true)
chunk = sock_recv(fd, 1024)
if (chunk == nil || len(chunk) == 0)
break
buf = buf + chunk
return buf
fun main()
args = argv()
host = arg_or_default(args, 0, "127.0.0.1")
port = to_number(arg_or_default(args, 1, 5555))
sql = arg_or_default(args, 2, "SELECT 1 AS one;")
fd = tcp_connect(host, port)
if (fd == 0)
print("Connect failed to " + host + " " + to_string(port))
return 1
// Ensure a single line terminated by \n
if (len(sql) == 0 || substr(sql, len(sql)-1, 1) != "\n")
sql = sql + "\n"
sent = sock_send(fd, sql)
if (sent < 0)
print("Send failed")
sock_close(fd)
return 1
resp = read_all(fd)
sock_close(fd)
if (resp == nil)
resp = ""
print(resp)
// Explicitly invoke main when the script is run
main()
/* Possible result with 67 entries in the tasks table:
RESULT
value
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
{map n=4}
END
*/