Files
sqlgen/docs/varchar.md
Dr. Patrick Urbanke b73e2a512d Added documentation
2025-05-07 04:18:10 +02:00

2.0 KiB

sqlgen::Varchar

The sqlgen::Varchar class provides a type-safe way to handle SQL VARCHAR fields in C++. It enforces length checks at runtime.

Usage

Basic Construction

Create a VARCHAR field with a specific maximum length:

 // Create a VARCHAR(50) field
sqlgen::Varchar<50> name;

// Initialize with a string
sqlgen::Varchar<50> name("John Doe");

// Initialize with a std::string
std::string str = "Jane Doe";
sqlgen::Varchar<50> name(str);

Safe Construction with Result

Use the make function for safe construction with error handling:

// Safe construction with error handling
auto result = sqlgen::Varchar<50>::make("John Doe");
if (result) {
    auto name = result.value();
    // Use name...
} else {
    // Handle error...
}

Assignment and Conversion

Assign values and convert between different VARCHAR sizes:

struct Person{
    sqlgen::Varchar<50> name;
};

person.name = "John Doe";  // Direct assignment
person.name = std::string("Jane Doe");  // From std::string

// Convert between different sizes
sqlgen::Varchar<100> long_name;
sqlgen::Varchar<50> short_name = long_name;  // Will check size at runtime

Accessing Values

Access the underlying string value:

struct Person{
    sqlgen::Varchar<50> name;
};

const auto person = Person{.name = "John Doe"};

// Get the value
const std::string& value1 = person.name();  
const std::string& value2 = person.name.get();
const std::string& value3 = person.name.value();  

// Get the maximum size
constexpr size_t max_size = name.size();

Notes

  • The template parameter _size specifies the maximum length of the VARCHAR field
  • All string operations are checked against the maximum length
  • The class provides both compile-time and runtime safety
  • The Result type is used for safe construction and error handling
  • The class supports:
    • Direct string assignment
    • Conversion between different VARCHAR sizes
    • Reflection for SQL operations
    • Move and copy semantics