remove ddb_types
This commit is contained in:
parent
796eed8de0
commit
9020037c20
|
@ -3,7 +3,7 @@ const sqlite = @import("sqlite");
|
||||||
const AuthenticatedRequest = @import("AuthenticatedRequest.zig");
|
const AuthenticatedRequest = @import("AuthenticatedRequest.zig");
|
||||||
const Account = @import("Account.zig");
|
const Account = @import("Account.zig");
|
||||||
const encryption = @import("encryption.zig");
|
const encryption = @import("encryption.zig");
|
||||||
const ddb_types = @import("ddb_types.zig");
|
const ddb = @import("ddb.zig");
|
||||||
const returnException = @import("main.zig").returnException;
|
const returnException = @import("main.zig").returnException;
|
||||||
|
|
||||||
// Copied from ddb_type and made inferred. Yuck :(
|
// Copied from ddb_type and made inferred. Yuck :(
|
||||||
|
@ -21,7 +21,7 @@ pub const AttributeTypeName = enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Cannot use AttributeTypeName enum as it is not inferred
|
// Cannot use AttributeTypeName enum as it is not inferred
|
||||||
// const AttributeValue = union(ddb_types.AttributeTypeName) {
|
// const AttributeValue = union(ddb.AttributeTypeName) {
|
||||||
const AttributeValue = union(AttributeTypeName) {
|
const AttributeValue = union(AttributeTypeName) {
|
||||||
string: []const u8,
|
string: []const u8,
|
||||||
number: []const u8, // Floating point stored as string
|
number: []const u8, // Floating point stored as string
|
||||||
|
@ -393,7 +393,7 @@ const Params = struct {
|
||||||
const attribute_type = val_val.key_ptr.*; // This should be "S", "N", "NULL", "BOOL", etc
|
const attribute_type = val_val.key_ptr.*; // This should be "S", "N", "NULL", "BOOL", etc
|
||||||
const attribute_value = val_val.value_ptr.*;
|
const attribute_value = val_val.value_ptr.*;
|
||||||
// Convert this to our enum
|
// Convert this to our enum
|
||||||
const attribute_type_enum = std.meta.stringToEnum(ddb_types.AttributeTypeDescriptor, attribute_type);
|
const attribute_type_enum = std.meta.stringToEnum(ddb.AttributeTypeDescriptor, attribute_type);
|
||||||
if (attribute_type_enum == null)
|
if (attribute_type_enum == null)
|
||||||
try returnException(
|
try returnException(
|
||||||
request,
|
request,
|
||||||
|
@ -403,7 +403,7 @@ const Params = struct {
|
||||||
"Request in RequestItems found attribute with invalid type",
|
"Request in RequestItems found attribute with invalid type",
|
||||||
);
|
);
|
||||||
// Convert our enum to something that looks better when reading code
|
// Convert our enum to something that looks better when reading code
|
||||||
const attribute_type_enum_converted = @as(ddb_types.AttributeTypeName, @enumFromInt(@intFromEnum(attribute_type_enum.?)));
|
const attribute_type_enum_converted = @as(ddb.AttributeTypeName, @enumFromInt(@intFromEnum(attribute_type_enum.?)));
|
||||||
// Now we need to get *THIS* enum over to our union, which uses the same values
|
// Now we need to get *THIS* enum over to our union, which uses the same values
|
||||||
// We'll just use a switch here, because each of these cases must
|
// We'll just use a switch here, because each of these cases must
|
||||||
// be handled slightly differently
|
// be handled slightly differently
|
||||||
|
|
|
@ -5,7 +5,6 @@ const Account = @import("Account.zig");
|
||||||
const encryption = @import("encryption.zig");
|
const encryption = @import("encryption.zig");
|
||||||
const returnException = @import("main.zig").returnException;
|
const returnException = @import("main.zig").returnException;
|
||||||
const ddb = @import("ddb.zig");
|
const ddb = @import("ddb.zig");
|
||||||
const ddb_types = @import("ddb_types.zig");
|
|
||||||
|
|
||||||
// These are in the original casing so as to make the error messages nice
|
// These are in the original casing so as to make the error messages nice
|
||||||
const RequiredFields = enum(u3) {
|
const RequiredFields = enum(u3) {
|
||||||
|
@ -18,7 +17,7 @@ const RequiredFields = enum(u3) {
|
||||||
|
|
||||||
const Params = struct {
|
const Params = struct {
|
||||||
table_name: []const u8,
|
table_name: []const u8,
|
||||||
table_info: ddb_types.TableInfo,
|
table_info: ddb.TableInfo,
|
||||||
read_capacity_units: ?i64 = null,
|
read_capacity_units: ?i64 = null,
|
||||||
write_capacity_units: ?i64 = null,
|
write_capacity_units: ?i64 = null,
|
||||||
billing_mode_pay_per_request: bool = false,
|
billing_mode_pay_per_request: bool = false,
|
||||||
|
@ -337,9 +336,9 @@ fn parseRequest(
|
||||||
return request_params;
|
return request_params;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parseAttributeDefinitions(request: *AuthenticatedRequest, definitions: []std.json.Value, writer: anytype) ![]*ddb_types.AttributeDefinition {
|
fn parseAttributeDefinitions(request: *AuthenticatedRequest, definitions: []std.json.Value, writer: anytype) ![]*ddb.AttributeDefinition {
|
||||||
const allocator = request.allocator;
|
const allocator = request.allocator;
|
||||||
var rc = try allocator.alloc(*ddb_types.AttributeDefinition, definitions.len);
|
var rc = try allocator.alloc(*ddb.AttributeDefinition, definitions.len);
|
||||||
errdefer allocator.free(rc);
|
errdefer allocator.free(rc);
|
||||||
// "AttributeDefinitions": [
|
// "AttributeDefinitions": [
|
||||||
// {
|
// {
|
||||||
|
@ -371,7 +370,7 @@ fn parseAttributeDefinitions(request: *AuthenticatedRequest, definitions: []std.
|
||||||
"Attribute definitions array can only consist of objects with AttributeName and AttributeType strings",
|
"Attribute definitions array can only consist of objects with AttributeName and AttributeType strings",
|
||||||
);
|
);
|
||||||
const type_string = attribute_type.?.string;
|
const type_string = attribute_type.?.string;
|
||||||
const type_enum = std.meta.stringToEnum(ddb_types.AttributeTypeDescriptor, type_string);
|
const type_enum = std.meta.stringToEnum(ddb.AttributeTypeDescriptor, type_string);
|
||||||
if (type_enum == null)
|
if (type_enum == null)
|
||||||
try returnException(
|
try returnException(
|
||||||
request,
|
request,
|
||||||
|
@ -382,7 +381,7 @@ fn parseAttributeDefinitions(request: *AuthenticatedRequest, definitions: []std.
|
||||||
); // TODO: This is kind of a lousy error message
|
); // TODO: This is kind of a lousy error message
|
||||||
// TODO: This can leak memory if a later validation error occurs.
|
// TODO: This can leak memory if a later validation error occurs.
|
||||||
// we are de-facto passed an arena here, but we shouldn't assume that
|
// we are de-facto passed an arena here, but we shouldn't assume that
|
||||||
var definition = try allocator.create(ddb_types.AttributeDefinition);
|
var definition = try allocator.create(ddb.AttributeDefinition);
|
||||||
definition.name = try allocator.dupe(u8, name.?.string);
|
definition.name = try allocator.dupe(u8, name.?.string);
|
||||||
definition.type = type_enum.?;
|
definition.type = type_enum.?;
|
||||||
rc[i] = definition;
|
rc[i] = definition;
|
||||||
|
|
61
src/ddb.zig
61
src/ddb.zig
|
@ -2,10 +2,55 @@ const std = @import("std");
|
||||||
const sqlite = @import("sqlite");
|
const sqlite = @import("sqlite");
|
||||||
const AuthenticatedRequest = @import("AuthenticatedRequest.zig");
|
const AuthenticatedRequest = @import("AuthenticatedRequest.zig");
|
||||||
const Account = @import("Account.zig");
|
const Account = @import("Account.zig");
|
||||||
const ddb_types = @import("ddb_types.zig");
|
|
||||||
const encryption = @import("encryption.zig");
|
const encryption = @import("encryption.zig");
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
|
|
||||||
|
/// Serialized into metadata table. This is an explicit enum with a twin
|
||||||
|
/// AttributeTypeName enum to make coding with these types easier. Use
|
||||||
|
/// Descriptor for storage or communication with the outside world, and
|
||||||
|
/// Name for internal use
|
||||||
|
pub const AttributeTypeDescriptor = enum(u4) {
|
||||||
|
S = 0,
|
||||||
|
N = 1,
|
||||||
|
B = 2,
|
||||||
|
BOOL = 3,
|
||||||
|
NULL = 4,
|
||||||
|
M = 5,
|
||||||
|
L = 6,
|
||||||
|
SS = 7,
|
||||||
|
NS = 8,
|
||||||
|
BS = 9,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const AttributeTypeName = enum(u4) {
|
||||||
|
string = 0,
|
||||||
|
number = 1,
|
||||||
|
binary = 2,
|
||||||
|
boolean = 3,
|
||||||
|
null = 4,
|
||||||
|
map = 5,
|
||||||
|
list = 6,
|
||||||
|
string_set = 7,
|
||||||
|
number_set = 8,
|
||||||
|
binary_set = 9,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Serialized into metadata table
|
||||||
|
pub const AttributeDefinition = struct {
|
||||||
|
name: []const u8,
|
||||||
|
type: AttributeTypeDescriptor,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// TableInfo is serialized directly into the underlying metadata table, along
|
||||||
|
/// with AttributeDefinition structure and types
|
||||||
|
pub const TableInfo = struct {
|
||||||
|
attribute_definitions: []*const AttributeDefinition,
|
||||||
|
// gsi_list: []const u8, // Not sure how this is used
|
||||||
|
// gsi_description_list: []const u8, // Not sure how this is used
|
||||||
|
// sqlite_index: []const u8, // Not sure how this is used
|
||||||
|
table_key: [encryption.encoded_key_length]u8,
|
||||||
|
};
|
||||||
|
|
||||||
pub const TableArray = struct {
|
pub const TableArray = struct {
|
||||||
items: []Table,
|
items: []Table,
|
||||||
allocator: std.mem.Allocator,
|
allocator: std.mem.Allocator,
|
||||||
|
@ -73,7 +118,7 @@ pub fn tablesForAccount(allocator: std.mem.Allocator, account_id: []const u8) !T
|
||||||
);
|
);
|
||||||
defer allocator.free(table_info_str);
|
defer allocator.free(table_info_str);
|
||||||
// std.debug.print(" \n===TableInfo: {s}\n===\n", .{table_info_str});
|
// std.debug.print(" \n===TableInfo: {s}\n===\n", .{table_info_str});
|
||||||
const table_info = try std.json.parseFromSlice(ddb_types.TableInfo, allocator, table_info_str, .{});
|
const table_info = try std.json.parseFromSlice(TableInfo, allocator, table_info_str, .{});
|
||||||
defer table_info.deinit();
|
defer table_info.deinit();
|
||||||
// errdefer allocator.free(table_info.table_key);
|
// errdefer allocator.free(table_info.table_key);
|
||||||
// defer {
|
// defer {
|
||||||
|
@ -101,7 +146,7 @@ pub fn createDdbTable(
|
||||||
db: *sqlite.Db,
|
db: *sqlite.Db,
|
||||||
account: Account,
|
account: Account,
|
||||||
table_name: []const u8,
|
table_name: []const u8,
|
||||||
table_info: ddb_types.TableInfo,
|
table_info: TableInfo,
|
||||||
read_capacity_units: i64,
|
read_capacity_units: i64,
|
||||||
write_capacity_units: i64,
|
write_capacity_units: i64,
|
||||||
billing_mode_pay_per_request: bool,
|
billing_mode_pay_per_request: bool,
|
||||||
|
@ -160,7 +205,7 @@ fn insertIntoDatabaseMetadata(
|
||||||
db: *sqlite.Db,
|
db: *sqlite.Db,
|
||||||
account: Account,
|
account: Account,
|
||||||
table_name: []const u8,
|
table_name: []const u8,
|
||||||
table_info: ddb_types.TableInfo,
|
table_info: TableInfo,
|
||||||
read_capacity_units: i64,
|
read_capacity_units: i64,
|
||||||
write_capacity_units: i64,
|
write_capacity_units: i64,
|
||||||
billing_mode_pay_per_request: bool,
|
billing_mode_pay_per_request: bool,
|
||||||
|
@ -229,13 +274,13 @@ fn testCreateTable(allocator: std.mem.Allocator, account_id: []const u8) !sqlite
|
||||||
var db = try Account.dbForAccount(allocator, account_id);
|
var db = try Account.dbForAccount(allocator, account_id);
|
||||||
const account = try Account.accountForId(allocator, account_id); // This will get us the encryption key needed
|
const account = try Account.accountForId(allocator, account_id); // This will get us the encryption key needed
|
||||||
defer account.deinit();
|
defer account.deinit();
|
||||||
var hash = ddb_types.AttributeDefinition{ .name = "Artist", .type = .S };
|
var hash = AttributeDefinition{ .name = "Artist", .type = .S };
|
||||||
var range = ddb_types.AttributeDefinition{ .name = "SongTitle", .type = .S };
|
var range = AttributeDefinition{ .name = "SongTitle", .type = .S };
|
||||||
var definitions = @constCast(&[_]*ddb_types.AttributeDefinition{
|
var definitions = @constCast(&[_]*AttributeDefinition{
|
||||||
&hash,
|
&hash,
|
||||||
&range,
|
&range,
|
||||||
});
|
});
|
||||||
var table_info: ddb_types.TableInfo = .{
|
var table_info: TableInfo = .{
|
||||||
.table_key = undefined,
|
.table_key = undefined,
|
||||||
.attribute_definitions = definitions[0..],
|
.attribute_definitions = definitions[0..],
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
const encryption = @import("encryption.zig");
|
|
||||||
|
|
||||||
pub const AttributeTypeDescriptor = enum(u4) {
|
|
||||||
S = 0,
|
|
||||||
N = 1,
|
|
||||||
B = 2,
|
|
||||||
BOOL = 3,
|
|
||||||
NULL = 4,
|
|
||||||
M = 5,
|
|
||||||
L = 6,
|
|
||||||
SS = 7,
|
|
||||||
NS = 8,
|
|
||||||
BS = 9,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const AttributeTypeName = enum(u4) {
|
|
||||||
string = 0,
|
|
||||||
number = 1,
|
|
||||||
binary = 2,
|
|
||||||
boolean = 3,
|
|
||||||
null = 4,
|
|
||||||
map = 5,
|
|
||||||
list = 6,
|
|
||||||
string_set = 7,
|
|
||||||
number_set = 8,
|
|
||||||
binary_set = 9,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const AttributeDefinition = struct {
|
|
||||||
name: []const u8,
|
|
||||||
type: AttributeTypeDescriptor,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const TableInfo = struct {
|
|
||||||
attribute_definitions: []*const AttributeDefinition,
|
|
||||||
// gsi_list: []const u8, // Not sure how this is used
|
|
||||||
// gsi_description_list: []const u8, // Not sure how this is used
|
|
||||||
// sqlite_index: []const u8, // Not sure how this is used
|
|
||||||
table_key: [encryption.encoded_key_length]u8,
|
|
||||||
};
|
|
Loading…
Reference in New Issue
Block a user