Skip to content

Instantly share code, notes, and snippets.

@nobuh
Created June 29, 2022 23:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nobuh/16e669c8b81aaf375ffb895df10cb5bd to your computer and use it in GitHub Desktop.
Save nobuh/16e669c8b81aaf375ffb895df10cb5bd to your computer and use it in GitHub Desktop.
Pseudo Toy SQLite clone in php
?php
define("EXIT_SUCCESS", 0);
define("EXIT_FAILURE", 1);
class InputBuffer
{
public ?string $buffer;
public int $buffer_length;
public int $input_length;
public function __construct() {
$this->buffer = null;
$this->buffer_length = 0;
$this->input_length = 0;
}
}
function print_prompt(): void {
echo "db > ";
}
function read_input(InputBuffer $input_buffer): void {
$input = fgets(STDIN);
$input_buffer->buffer_length = strlen($input);
if ($input === false) {
echo "Error reading input", PHP_EOL;
exit(EXIT_FAILURE);
}
$input_buffer->buffer = trim($input);
$input_buffer->input_length= strlen($input_buffer->buffer);
}
function close_input_buffer(InputBuffer $input_buffer): void {
$input_buffer = null;
}
/**
* main
*/
$input_buffer = new InputBuffer();
while (true) {
print_prompt();
read_input($input_buffer);
if ($input_buffer->buffer === ".exit") {
close_input_buffer($input_buffer);
exit(EXIT_SUCCESS);
} else {
echo "Unrecognized command ", $input_buffer->buffer, PHP_EOL;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment