1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 07:38:10 +00:00

LibSQL: Allow constructing SQL values from a String

LibSQL still uses ByteString internally for storage, but to help outside
application port to String, add helpers to construct values from String
and to convert a value to a String.
This commit is contained in:
Timothy Flynn 2024-01-26 11:35:39 -05:00 committed by Andreas Kling
parent c4820838bf
commit 30fae8fa1d
2 changed files with 31 additions and 2 deletions

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2021, Jan de Visser <jan@de-visser.net>
* Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
* Copyright (c) 2022-2024, Tim Flynn <trflynn89@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -97,6 +97,11 @@ Value::Value(SQLType type)
{
}
Value::Value(String value)
: Value(value.to_byte_string())
{
}
Value::Value(ByteString value)
: m_type(SQLType::Text)
, m_value(move(value))
@ -214,6 +219,27 @@ bool Value::is_int() const
return m_value.has_value() && (m_value->has<i64>() || m_value->has<u64>());
}
ErrorOr<String> Value::to_string() const
{
if (is_null())
return String::from_utf8("(null)"sv);
return m_value->visit(
[](ByteString const& value) { return String::from_byte_string(value); },
[](Integer auto value) { return String::number(value); },
[](double value) { return String::number(value); },
[](bool value) { return String::from_utf8(value ? "true"sv : "false"sv); },
[](TupleValue const& value) {
StringBuilder builder;
builder.append('(');
builder.join(',', value.values);
builder.append(')');
return builder.to_string();
});
}
ByteString Value::to_byte_string() const
{
if (is_null())