types

package
v1.128.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 12, 2026 License: MIT Imports: 6 Imported by: 2

Documentation

Index

Constants

View Source
const OracleVARCHAR1024 = "VARCHAR2(1024)"
View Source
const OracleVARCHAR255 = "VARCHAR2(255)"
View Source
const UIDDefaultExprMariaDB = "CONCAT(HEX(FLOOR(UNIX_TIMESTAMP(NOW(6)) * 1000000)), REPLACE(UUID(), '-', ''))"

UIDDefaultExprMariaDB is the MariaDB/MySQL UID default expression

View Source
const UIDDefaultExprOracle = "" /* 170-byte string literal not displayed */

UIDDefaultExprOracle is the Oracle UID default expression

View Source
const UIDDefaultExprPostgreSQL = "CONCAT(to_hex((extract(epoch from now()) * 1000000)::bigint), gen_random_uuid()::text)"

UIDDefaultExprPostgreSQL is the PostgreSQL UID default expression

View Source
const UIDDefaultExprSQLServer = "" /* 168-byte string literal not displayed */

UIDDefaultExprSQLServer is the SQL Server UID default expression

View Source
const VARCHAR1024 = "VARCHAR(1024)"
View Source
const VARCHAR255 = "VARCHAR(255)"

SQL type constants to avoid duplication. Oracle gets VARCHAR2: Oracle keeps VARCHAR reserved for a future redefinition and documents VARCHAR2 as the type to write, and every other Oracle string type here already says so.

Variables

View Source
var (
	DataTypeEncryptedBlob = DataType{
		Description:        "Binary data encrypted at rest (secrets/ciphertext); native BLOB/BYTEA, base64 JSON string, []byte in Go.",
		APIParameterType:   APIParameterTypeEncryptedBlob,
		JSONType:           JSONTypeString,
		GoType:             GoTypeSliceByte,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BYTEA", base.DXDatabaseTypeSQLServer: "VARBINARY(MAX)", base.DXDatabaseTypeMariaDB: "LONGBLOB", base.DXDatabaseTypeOracle: "BLOB"},
	}
	DataTypeBlob = DataType{
		Description:        "Opaque binary payload (small inline files/images); native BLOB/BYTEA, base64 JSON string, []byte in Go. Large media belongs in object storage.",
		APIParameterType:   APIParameterTypeBlob,
		JSONType:           JSONTypeString,
		GoType:             GoTypeSliceByte,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BYTEA", base.DXDatabaseTypeSQLServer: "VARBINARY(MAX)", base.DXDatabaseTypeMariaDB: "LONGBLOB", base.DXDatabaseTypeOracle: "BLOB"},
	}

	DataTypeUID = DataType{
		Description:                "Legacy wide opaque public identifier, VARCHAR(1024) with a DB-generated timestamp-hex + UUID default (anti-IDOR/ENUM). Not index-safe on SQL Server (>900B); the platform now uses String255 for uid.",
		APIParameterType:           APIParameterTypeString,
		JSONType:                   JSONTypeString,
		GoType:                     GoTypeString,
		TypeByDatabaseType:         map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR1024, base.DXDatabaseTypeSQLServer: VARCHAR1024, base.DXDatabaseTypeMariaDB: VARCHAR1024, base.DXDatabaseTypeOracle: "VARCHAR2(1024)"},
		DefaultValueByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: UIDDefaultExprPostgreSQL, base.DXDatabaseTypeSQLServer: UIDDefaultExprSQLServer, base.DXDatabaseTypeOracle: UIDDefaultExprOracle, base.DXDatabaseTypeMariaDB: UIDDefaultExprMariaDB},
	}

	DataTypeString = DataType{
		Description:        "General-purpose text up to 1024 chars (VARCHAR). Default when no length constraint matters.",
		APIParameterType:   APIParameterTypeString,
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR1024, base.DXDatabaseTypeSQLServer: VARCHAR1024, base.DXDatabaseTypeMariaDB: VARCHAR1024, base.DXDatabaseTypeOracle: OracleVARCHAR1024},
	}

	DataTypeProtectedString = DataType{
		Description:        "PII/sensitive text, masked at display by role; VARCHAR(1024). The protected marker drives masking, not storage.",
		APIParameterType:   APIParameterTypeProtectedString,
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR1024, base.DXDatabaseTypeSQLServer: VARCHAR1024, base.DXDatabaseTypeMariaDB: VARCHAR1024, base.DXDatabaseTypeOracle: OracleVARCHAR1024},
	}

	DataTypeProtectedSQLString = DataType{
		Description:        "Protected text also guarded against SQL injection (validated/escaped); VARCHAR(1024).",
		APIParameterType:   APIParameterTypeProtectedSQLString,
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR1024, base.DXDatabaseTypeSQLServer: VARCHAR1024, base.DXDatabaseTypeMariaDB: VARCHAR1024, base.DXDatabaseTypeOracle: OracleVARCHAR1024},
	}

	DataTypeProtectedNonEmptyString = DataType{
		Description:        "Protected text that must be non-empty; VARCHAR(1024).",
		APIParameterType:   APIParameterTypeProtectedNonEmptyString,
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR1024, base.DXDatabaseTypeSQLServer: VARCHAR1024, base.DXDatabaseTypeMariaDB: VARCHAR1024, base.DXDatabaseTypeOracle: OracleVARCHAR1024},
	}

	DataTypeNullableString = DataType{
		Description:        "Optional text (may be NULL); VARCHAR(1024), Go *string so NULL differs from empty.",
		APIParameterType:   APIParameterTypeNullableString,
		JSONType:           JSONTypeString,
		GoType:             GoTypeStringPointer,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR1024, base.DXDatabaseTypeSQLServer: VARCHAR1024, base.DXDatabaseTypeMariaDB: VARCHAR1024, base.DXDatabaseTypeOracle: OracleVARCHAR1024},
	}

	DataTypeNonEmptyString = DataType{
		Description:        "Text that must be non-empty (rejects empty/whitespace); VARCHAR(1024).",
		APIParameterType:   APIParameterTypeNonEmptyString,
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR1024, base.DXDatabaseTypeSQLServer: VARCHAR1024, base.DXDatabaseTypeMariaDB: VARCHAR1024, base.DXDatabaseTypeOracle: OracleVARCHAR1024},
	}

	DataTypeEmail = DataType{
		Description:        "Email address, format-validated; VARCHAR(255).",
		APIParameterType:   APIParameterTypeEmail,
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR255, base.DXDatabaseTypeSQLServer: VARCHAR255, base.DXDatabaseTypeMariaDB: VARCHAR255, base.DXDatabaseTypeOracle: OracleVARCHAR255},
	}

	DataTypePhoneNumber = DataType{
		Description:        "Phone number, format-validated; VARCHAR(255).",
		APIParameterType:   APIParameterTypePhoneNumber,
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR255, base.DXDatabaseTypeSQLServer: VARCHAR255, base.DXDatabaseTypeMariaDB: VARCHAR255, base.DXDatabaseTypeOracle: OracleVARCHAR255},
	}

	DataTypeNPWP = DataType{
		Description:        "Indonesian taxpayer id (NPWP), format-validated; VARCHAR(255).",
		APIParameterType:   APIParameterTypeNPWP,
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR255, base.DXDatabaseTypeSQLServer: VARCHAR255, base.DXDatabaseTypeMariaDB: VARCHAR255, base.DXDatabaseTypeOracle: OracleVARCHAR255},
	}

	// DataTypeID is an integer identifier / primary key — same underlying type as
	// Int64 (BIGINT / int64) but a distinct named type + APIParameterType so it reads
	// as an identifier and is distinguishable by consumers (cf. UID vs String1024).
	DataTypeID = DataType{
		Description:        "Integer identifier / primary key (BIGINT, int64), JSON number. Internal/debug tier; public API exposes UID instead.",
		APIParameterType:   APIParameterTypeID,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt64,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BIGINT", base.DXDatabaseTypeSQLServer: "BIGINT", base.DXDatabaseTypeMariaDB: "BIGINT", base.DXDatabaseTypeOracle: "NUMBER(19)"},
	}

	DataTypeInt32 = DataType{
		Description:        "32-bit signed integer (INT), JSON number, Go int32.",
		APIParameterType:   APIParameterTypeInt32,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt32,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "INT", base.DXDatabaseTypeSQLServer: "INT", base.DXDatabaseTypeMariaDB: "INT", base.DXDatabaseTypeOracle: "NUMBER(10)"},
	}

	DataTypeInt32P = DataType{
		Description:        "32-bit positive integer (> 0); INT.",
		APIParameterType:   APIParameterTypeInt32P,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt32,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "INT", base.DXDatabaseTypeSQLServer: "INT", base.DXDatabaseTypeMariaDB: "INT", base.DXDatabaseTypeOracle: "NUMBER(10)"},
	}

	DataTypeInt32ZP = DataType{
		Description:        "32-bit zero-or-positive integer (>= 0); INT.",
		APIParameterType:   APIParameterTypeInt32ZP,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt32,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "INT", base.DXDatabaseTypeSQLServer: "INT", base.DXDatabaseTypeMariaDB: "INT", base.DXDatabaseTypeOracle: "NUMBER(10)"},
	}

	DataTypeNullableInt32 = DataType{
		Description:        "Optional 32-bit integer (may be left out of a request); INT, Go int32.",
		APIParameterType:   APIParameterTypeNullableInt32,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt32,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "INT", base.DXDatabaseTypeSQLServer: "INT", base.DXDatabaseTypeMariaDB: "INT", base.DXDatabaseTypeOracle: "NUMBER(10)"},
	}

	DataTypeInt64 = DataType{
		Description:        "64-bit signed integer (BIGINT), JSON number, Go int64.",
		APIParameterType:   APIParameterTypeInt64,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt64,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BIGINT", base.DXDatabaseTypeSQLServer: "BIGINT", base.DXDatabaseTypeMariaDB: "BIGINT", base.DXDatabaseTypeOracle: "NUMBER(19)"},
	}

	DataTypeInt64P = DataType{
		Description:        "64-bit positive integer (> 0); BIGINT.",
		APIParameterType:   APIParameterTypeInt64P,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt64,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BIGINT", base.DXDatabaseTypeSQLServer: "BIGINT", base.DXDatabaseTypeMariaDB: "BIGINT", base.DXDatabaseTypeOracle: "NUMBER(19)"},
	}

	DataTypeInt64ZP = DataType{
		Description:        "64-bit zero-or-positive integer (>= 0); BIGINT.",
		APIParameterType:   APIParameterTypeInt64ZP,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt64,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BIGINT", base.DXDatabaseTypeSQLServer: "BIGINT", base.DXDatabaseTypeMariaDB: "BIGINT", base.DXDatabaseTypeOracle: "NUMBER(19)"},
	}

	DataTypeNullableInt64 = DataType{
		Description:        "Optional 64-bit integer (may be NULL); BIGINT, Go *int64.",
		APIParameterType:   APIParameterTypeNullableInt64,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt64Pointer,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BIGINT", base.DXDatabaseTypeSQLServer: "BIGINT", base.DXDatabaseTypeMariaDB: "BIGINT", base.DXDatabaseTypeOracle: "NUMBER(19)"},
	}

	DataTypeFloat32 = DataType{
		Description:        "32-bit binary float (REAL), JSON number. Approximate and lossy; never use for money, use Money.",
		APIParameterType:   APIParameterTypeFloat32,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeFloat32,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "REAL", base.DXDatabaseTypeSQLServer: "REAL", base.DXDatabaseTypeMariaDB: "FLOAT", base.DXDatabaseTypeOracle: "BINARY_FLOAT"},
	}

	DataTypeFloat32P = DataType{
		Description:        "Positive 32-bit float (> 0); REAL. Not for money.",
		APIParameterType:   APIParameterTypeFloat32P,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeFloat32,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "REAL", base.DXDatabaseTypeSQLServer: "REAL", base.DXDatabaseTypeMariaDB: "FLOAT", base.DXDatabaseTypeOracle: "BINARY_FLOAT"},
	}

	DataTypeFloat32ZP = DataType{
		Description:        "Zero-or-positive 32-bit float (>= 0); REAL. Not for money.",
		APIParameterType:   APIParameterTypeFloat32ZP,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeFloat32,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "REAL", base.DXDatabaseTypeSQLServer: "REAL", base.DXDatabaseTypeMariaDB: "FLOAT", base.DXDatabaseTypeOracle: "BINARY_FLOAT"},
	}

	DataTypeFloat64 = DataType{
		Description:        "64-bit binary float (DOUBLE), JSON number. Approximate and lossy; never use for money, use Money.",
		APIParameterType:   APIParameterTypeFloat64,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeFloat64,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "DOUBLE PRECISION", base.DXDatabaseTypeSQLServer: "FLOAT", base.DXDatabaseTypeMariaDB: "DOUBLE", base.DXDatabaseTypeOracle: "BINARY_DOUBLE"},
	}

	DataTypeFloat64P = DataType{
		Description:        "Positive 64-bit float (> 0); DOUBLE. Not for money.",
		APIParameterType:   APIParameterTypeFloat64P,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeFloat64,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "DOUBLE PRECISION", base.DXDatabaseTypeSQLServer: "FLOAT", base.DXDatabaseTypeMariaDB: "DOUBLE", base.DXDatabaseTypeOracle: "BINARY_DOUBLE"},
	}

	DataTypeFloat64ZP = DataType{
		Description:        "Zero-or-positive 64-bit float (>= 0); DOUBLE. Not for money.",
		APIParameterType:   APIParameterTypeFloat64ZP,
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeFloat64,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "DOUBLE PRECISION", base.DXDatabaseTypeSQLServer: "FLOAT", base.DXDatabaseTypeMariaDB: "DOUBLE", base.DXDatabaseTypeOracle: "BINARY_DOUBLE"},
	}

	DataTypeBool = DataType{
		Description:        "Boolean true/false; BOOLEAN (BIT on SQL Server, NUMBER(1) on Oracle).",
		APIParameterType:   APIParameterTypeBoolean,
		JSONType:           JSONTypeBoolean,
		GoType:             GoTypeBool,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BOOLEAN", base.DXDatabaseTypeSQLServer: "BIT", base.DXDatabaseTypeMariaDB: "BOOLEAN", base.DXDatabaseTypeOracle: "NUMBER(1)"},
	}

	// DataTypeISO8601 is an instant, and the instant must survive the round trip.
	//
	// # Why MariaDB is text and the other three are not
	//
	// PostgreSQL, SQL Server and Oracle each have a column type that knows what an
	// instant is: TIMESTAMP WITH TIME ZONE, DATETIMEOFFSET, TIMESTAMP WITH TIME
	// ZONE. Write 12:00+07:00 and read back the same instant, whatever zone the
	// reader is in.
	//
	// MariaDB and MySQL have no such type. There are two candidates and neither
	// works:
	//
	//   DATETIME  stores the wall-clock digits it was handed and nothing else. The
	//             offset is dropped on write, silently. Two processes in different
	//             zones write "12:00" for instants seven hours apart and the column
	//             cannot tell them apart afterwards -- the information is gone, not
	//             merely unlabelled.
	//   TIMESTAMP normalises to UTC internally, which sounds right, but renders
	//             through the READER's session time_zone. The value you get back
	//             depends on the connection that asks, not on the row. Measured:
	//             written at session +07:00, the same row reads 12:00 at +07:00 and
	//             05:00 at +00:00. It also spans only 1970-2038.
	//
	// So this type used to map to DATETIME on MariaDB, which meant a type whose
	// whole promise is "instant with timezone" quietly kept the zone on three
	// engines and discarded it on the fourth. No error, no warning, and nothing
	// visible until a writer and a reader disagree about which zone the bare digits
	// were in -- at which point every value is wrong by an offset and there is no
	// way to tell by how much, because the offset was never recorded.
	//
	// Text is the only representation MariaDB has that can carry an offset at all,
	// so on MariaDB this type is ISO-8601 text and the DDL is VARCHAR(35). That is
	// a deliberate per-engine divergence: identical MEANING on all four, at the
	// cost of a different column type on one, which is the correct trade when the
	// alternative is a type that keeps its promise on three engines out of four.
	//
	// # The invariant that makes text safe
	//
	// Stored UTC-normalised and fixed-width -- "2006-01-02T15:04:05.000000000Z",
	// always nine fractional digits, never trimmed. That is what makes byte order
	// equal chronological order, which ORDER BY, BETWEEN, MIN and MAX on this
	// column all silently depend on. Mixed offsets would break all of them: with
	// "12:00:00+07:00" and "06:00:00Z" -- the same instant -- a string comparison
	// answers by the leading digit and gets it backwards. Trimmed fractions break
	// them too, because "…:05.5Z" sorts after "…:05.50Z" while being equal.
	//
	// Normalising to UTC discards the caller's original offset. That is the same
	// thing PostgreSQL's TIMESTAMP WITH TIME ZONE does, and it is not a loss: this
	// type is defined as an instant, and the instant is exact. A column that must
	// remember which zone a human was standing in needs a second column for it.
	//
	// The write path enforces this. models.NormalizeFieldValueForDBType converts a
	// time.Time to that layout when this type lands on a text column, because
	// go-sql-driver/mysql would otherwise encode it as a MySQL datetime literal --
	// "2026-08-31 12:00:00", no offset, not ISO-8601 -- which is worse than the
	// DATETIME this replaced. VARCHAR(35) rather than (30) leaves room for an
	// offset-bearing value written by something outside dxlib; such a value is
	// still read correctly, it just does not sort against the normalised ones.
	DataTypeISO8601 = DataType{
		Description:        "Instant with timezone (RFC3339/ISO-8601); JSON string, Go time.Time; TIMESTAMP WITH TIME ZONE, ISO-8601 text on MariaDB, which has no offset-bearing type.",
		APIParameterType:   APIParameterTypeISO8601,
		JSONType:           JSONTypeString,
		GoType:             GoTypeTime,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "TIMESTAMP WITH TIME ZONE", base.DXDatabaseTypeSQLServer: "DATETIMEOFFSET", base.DXDatabaseTypeMariaDB: "VARCHAR(35)", base.DXDatabaseTypeOracle: "TIMESTAMP WITH TIME ZONE"},
	}

	// ISO8601TextLayout is the on-disk form of DataTypeISO8601 wherever it is
	// stored as text. Fixed width and UTC, so byte order is chronological order.
	// See the comment on DataTypeISO8601 for why that matters.
	ISO8601TextLayout = "2006-01-02T15:04:05.000000000Z07:00"

	DataTypeDate = DataType{
		Description:        "Calendar date, no time; JSON string YYYY-MM-DD, Go time.Time; DATE.",
		APIParameterType:   APIParameterTypeDate,
		JSONType:           JSONTypeString,
		GoType:             GoTypeTime,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "DATE", base.DXDatabaseTypeSQLServer: "DATE", base.DXDatabaseTypeMariaDB: "DATE", base.DXDatabaseTypeOracle: "DATE"},
	}

	DataTypeTime = DataType{
		Description:        "Time of day, no date; JSON string HH:MM:SS, Go time.Time; TIME (DATE on Oracle).",
		APIParameterType:   APIParameterTypeTime,
		JSONType:           JSONTypeString,
		GoType:             GoTypeTime,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "TIME", base.DXDatabaseTypeSQLServer: "TIME", base.DXDatabaseTypeMariaDB: "TIME", base.DXDatabaseTypeOracle: "DATE"},
	}

	DataTypeJSON = DataType{
		Description:        "Structured JSON object; JSONB native, Go map. For schemaless/nested data.",
		APIParameterType:   APIParameterTypeJSON,
		JSONType:           JSONTypeObject,
		GoType:             GoTypeMapStringInterface,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "JSONB", base.DXDatabaseTypeSQLServer: "NVARCHAR(MAX)", base.DXDatabaseTypeMariaDB: "JSON", base.DXDatabaseTypeOracle: "CLOB"},
	}

	DataTypeJSONPassthrough = DataType{
		Description:        "JSON object stored verbatim (no re-serialization); JSONB, preserves exact client bytes.",
		APIParameterType:   APIParameterTypeJSONPassthrough,
		JSONType:           JSONTypeObject,
		GoType:             GoTypeMapStringInterface,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "JSONB", base.DXDatabaseTypeSQLServer: "NVARCHAR(MAX)", base.DXDatabaseTypeMariaDB: "JSON", base.DXDatabaseTypeOracle: "CLOB"},
	}

	DataTypeArray = DataType{
		Description:        "JSON array of mixed values; JSONB, Go []interface{}.",
		APIParameterType:   APIParameterTypeArray,
		JSONType:           JSONTypeArray,
		GoType:             GoTypeSliceInterface,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "JSONB", base.DXDatabaseTypeSQLServer: "NVARCHAR(MAX)", base.DXDatabaseTypeMariaDB: "JSON", base.DXDatabaseTypeOracle: "CLOB"},
	}

	DataTypeArrayString = DataType{
		Description:        "Array of strings; native TEXT[] on PostgreSQL, JSON elsewhere; Go []string.",
		APIParameterType:   APIParameterTypeArrayString,
		JSONType:           JSONTypeArray,
		GoType:             GoTypeSliceString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "TEXT[]", base.DXDatabaseTypeSQLServer: "NVARCHAR(MAX)", base.DXDatabaseTypeMariaDB: "JSON", base.DXDatabaseTypeOracle: "CLOB"},
	}

	DataTypeArrayInt64 = DataType{
		Description:        "Array of 64-bit integers; native BIGINT[] on PostgreSQL, JSON elsewhere; Go []int64.",
		APIParameterType:   APIParameterTypeArrayInt64,
		JSONType:           JSONTypeArray,
		GoType:             GoTypeSliceInt64,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BIGINT[]", base.DXDatabaseTypeSQLServer: "NVARCHAR(MAX)", base.DXDatabaseTypeMariaDB: "JSON", base.DXDatabaseTypeOracle: "CLOB"},
	}

	DataTypeArrayJSONTemplate = DataType{
		Description:        "Array of JSON objects (templated rows); JSONB, Go []map.",
		APIParameterType:   APIParameterTypeArrayJSONTemplate,
		JSONType:           JSONTypeArray,
		GoType:             GoTypeSliceMapStringInterface,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "JSONB", base.DXDatabaseTypeSQLServer: "NVARCHAR(MAX)", base.DXDatabaseTypeMariaDB: "JSON", base.DXDatabaseTypeOracle: "CLOB"},
	}

	DataTypeMapStringString = DataType{
		Description:        "String-to-string map; JSONB object, Go map[string]string.",
		APIParameterType:   APIParameterTypeMapStringString,
		JSONType:           JSONTypeObject,
		GoType:             GoTypeMapStringString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "JSONB", base.DXDatabaseTypeSQLServer: "NVARCHAR(MAX)", base.DXDatabaseTypeMariaDB: "JSON", base.DXDatabaseTypeOracle: "CLOB"},
	}

	DataTypeSerial = DataType{
		Description:        "32-bit DB auto-increment primary key (SERIAL/IDENTITY); column-only, not an API param. Prefer BigSerial (64-bit) for new PKs.",
		APIParameterType:   "serial",
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt32,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "SERIAL", base.DXDatabaseTypeSQLServer: "INT IDENTITY(1,1)", base.DXDatabaseTypeMariaDB: "INT AUTO_INCREMENT", base.DXDatabaseTypeOracle: "NUMBER GENERATED BY DEFAULT AS IDENTITY"},
	}

	// DataTypeBigSerial is a 64-bit auto-increment primary key (the BIGINT counterpart
	// of DataTypeSerial). Column-only (like Serial): no Types-map / validation entry.
	DataTypeBigSerial = DataType{
		Description:        "64-bit DB auto-increment primary key (BIGSERIAL/IDENTITY); column-only. The default surrogate id.",
		APIParameterType:   "bigserial",
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt64,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "BIGSERIAL", base.DXDatabaseTypeSQLServer: "BIGINT IDENTITY(1,1)", base.DXDatabaseTypeMariaDB: "BIGINT AUTO_INCREMENT", base.DXDatabaseTypeOracle: "NUMBER(19) GENERATED BY DEFAULT AS IDENTITY"},
	}

	DataTypeInt = DataType{
		Description:        "32-bit integer (INT); the bare-named alias of Int32.",
		APIParameterType:   "int",
		JSONType:           JSONTypeNumber,
		GoType:             GoTypeInt32,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "INT", base.DXDatabaseTypeSQLServer: "INT", base.DXDatabaseTypeMariaDB: "INT", base.DXDatabaseTypeOracle: "NUMBER(10)"},
	}

	DataTypeString1 = DataType{
		Description:        "Text up to 1 char (VARCHAR(1)); one-char codes/flags.",
		APIParameterType:   "string1",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(1)", base.DXDatabaseTypeSQLServer: "VARCHAR(1)", base.DXDatabaseTypeMariaDB: "VARCHAR(1)", base.DXDatabaseTypeOracle: "VARCHAR2(1)"},
	}

	DataTypeString5 = DataType{
		Description:        "Text up to 5 chars (VARCHAR(5)).",
		APIParameterType:   "string5",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(5)", base.DXDatabaseTypeSQLServer: "VARCHAR(5)", base.DXDatabaseTypeMariaDB: "VARCHAR(5)", base.DXDatabaseTypeOracle: "VARCHAR2(5)"},
	}

	DataTypeString10 = DataType{
		Description:        "Text up to 10 chars (VARCHAR(10)).",
		APIParameterType:   "string10",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(10)", base.DXDatabaseTypeSQLServer: "VARCHAR(10)", base.DXDatabaseTypeMariaDB: "VARCHAR(10)", base.DXDatabaseTypeOracle: "VARCHAR2(10)"},
	}

	DataTypeString20 = DataType{
		Description:        "Text up to 20 chars (VARCHAR(20)).",
		APIParameterType:   "string20",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(20)", base.DXDatabaseTypeSQLServer: "VARCHAR(20)", base.DXDatabaseTypeMariaDB: "VARCHAR(20)", base.DXDatabaseTypeOracle: "VARCHAR2(20)"},
	}

	DataTypeString30 = DataType{
		Description:        "Text up to 30 chars (VARCHAR(30)).",
		APIParameterType:   "string30",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(30)", base.DXDatabaseTypeSQLServer: "VARCHAR(30)", base.DXDatabaseTypeMariaDB: "VARCHAR(30)", base.DXDatabaseTypeOracle: "VARCHAR2(30)"},
	}

	DataTypeString50 = DataType{
		Description:        "Text up to 50 chars (VARCHAR(50)).",
		APIParameterType:   "string50",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(50)", base.DXDatabaseTypeSQLServer: "VARCHAR(50)", base.DXDatabaseTypeMariaDB: "VARCHAR(50)", base.DXDatabaseTypeOracle: "VARCHAR2(50)"},
	}

	DataTypeString100 = DataType{
		Description:        "Text up to 100 chars (VARCHAR(100)).",
		APIParameterType:   "string100",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(100)", base.DXDatabaseTypeSQLServer: "VARCHAR(100)", base.DXDatabaseTypeMariaDB: "VARCHAR(100)", base.DXDatabaseTypeOracle: "VARCHAR2(100)"},
	}

	DataTypeString255 = DataType{
		Description:        "Text up to 255 chars; index-safe key on all engines (255B < 900 SQL Server; 1020B < 3072 MariaDB). The platform uid width.",
		APIParameterType:   "string255",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR255, base.DXDatabaseTypeSQLServer: VARCHAR255, base.DXDatabaseTypeMariaDB: VARCHAR255, base.DXDatabaseTypeOracle: "VARCHAR2(255)"},
	}

	DataTypeString256 = DataType{
		Description:        "Text up to 256 chars (VARCHAR(256)).",
		APIParameterType:   "string256",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(256)", base.DXDatabaseTypeSQLServer: "VARCHAR(256)", base.DXDatabaseTypeMariaDB: "VARCHAR(256)", base.DXDatabaseTypeOracle: "VARCHAR2(256)"},
	}

	DataTypeString500 = DataType{
		Description:        "Text up to 500 chars (VARCHAR(500)).",
		APIParameterType:   "string500",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(500)", base.DXDatabaseTypeSQLServer: "VARCHAR(500)", base.DXDatabaseTypeMariaDB: "VARCHAR(500)", base.DXDatabaseTypeOracle: "VARCHAR2(500)"},
	}

	// DataTypeString512 is a 512-char string — index-safe as a key on all four engines
	// (MariaDB utf8mb4 512*4=2048B<3072B; SQL Server 512B<900B), unlike UID's 1024.
	DataTypeString512 = DataType{
		Description:        "Text up to 512 chars; index-safe key on all four engines, unlike the wider UID(1024).",
		APIParameterType:   "string512",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(512)", base.DXDatabaseTypeSQLServer: "VARCHAR(512)", base.DXDatabaseTypeMariaDB: "VARCHAR(512)", base.DXDatabaseTypeOracle: "VARCHAR2(512)"},
	}

	DataTypeString1024 = DataType{
		Description:        "Text up to 1024 chars (VARCHAR(1024)). NOT index-safe as a key on SQL Server (> 900B); use String255/512 for keys.",
		APIParameterType:   "string1024",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: VARCHAR1024, base.DXDatabaseTypeSQLServer: VARCHAR1024, base.DXDatabaseTypeMariaDB: VARCHAR1024, base.DXDatabaseTypeOracle: "VARCHAR2(1024)"},
	}

	DataTypeString2048 = DataType{
		Description:        "Text up to 2048 chars (VARCHAR(2048)).",
		APIParameterType:   "string2048",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(2048)", base.DXDatabaseTypeSQLServer: "VARCHAR(2048)", base.DXDatabaseTypeMariaDB: "VARCHAR(2048)", base.DXDatabaseTypeOracle: "VARCHAR2(2048)"},
	}

	DataTypeString8096 = DataType{
		Description:        "Long text up to 8096 chars; VARCHAR(MAX) on SQL Server (its VARCHAR cap is 8000), TEXT (MariaDB) / CLOB (Oracle).",
		APIParameterType:   "string8096",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(8096)", base.DXDatabaseTypeSQLServer: "VARCHAR(MAX)", base.DXDatabaseTypeMariaDB: "TEXT", base.DXDatabaseTypeOracle: "CLOB"},
	}

	DataTypeString32768 = DataType{
		Description:        "Very long text; VARCHAR(MAX) (SQL Server) / TEXT (MariaDB) / CLOB (Oracle).",
		APIParameterType:   "string32768",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "VARCHAR(32768)", base.DXDatabaseTypeSQLServer: "VARCHAR(MAX)", base.DXDatabaseTypeMariaDB: "TEXT", base.DXDatabaseTypeOracle: "CLOB"},
	}

	// Deprecated: use DataTypeMoney (NUMERIC(23,4)) for monetary values; this legacy
	// NUMERIC(30,4) type is string-backed with no decimal semantics and is kept only
	// for backward compatibility.
	DataTypeDecimal = DataType{
		Description:        "Deprecated: use Money (NUMERIC(23,4)) for monetary values. Legacy fixed-point NUMERIC(30,4) backed by a plain Go string with no decimal semantics; kept only for compatibility.",
		APIParameterType:   "decimal",
		JSONType:           JSONTypeString,
		GoType:             GoTypeString,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "NUMERIC(30,4)", base.DXDatabaseTypeSQLServer: "DECIMAL(30,4)", base.DXDatabaseTypeMariaDB: "DECIMAL(30,4)", base.DXDatabaseTypeOracle: "NUMBER(30,4)"},
	}

	// DataTypeMoney — fixed-point monetary amount, NUMERIC(23,4) on every engine (19
	// integer digits cover 10,000-trillion needs + 4 decimals; fits SQL Server max 38,
	// MariaDB 65, Oracle 38, PostgreSQL unbounded). JSON string ("1250000.375") for JS
	// precision; Go shopspring decimal.Decimal. Currency (fixed or companion-field) is
	// metadata on the data-model field, not the type.
	DataTypeMoney = DataType{
		Description:        "Fixed-point monetary amount - essentially a number, but stored as NUMERIC(23,4) and carried as a JSON string (JS loses precision on large/decimal numbers) and as shopspring decimal.Decimal in Go for exact arithmetic. Currency is field metadata, not part of the type.",
		APIParameterType:   APIParameterTypeMoney,
		JSONType:           JSONTypeString,
		GoType:             GoTypeMoney,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "NUMERIC(23,4)", base.DXDatabaseTypeSQLServer: "DECIMAL(23,4)", base.DXDatabaseTypeMariaDB: "DECIMAL(23,4)", base.DXDatabaseTypeOracle: "NUMBER(23,4)"},
	}

	DataTypeGeometryPoint = DataType{
		Description:        "Geographic point (lon/lat, SRID 4326); native spatial type per engine (geometry/GEOGRAPHY/POINT/SDO_GEOMETRY), Go map.",
		APIParameterType:   "geometry_point",
		JSONType:           JSONTypeObject,
		GoType:             GoTypeMapStringInterface,
		TypeByDatabaseType: map[base.DXDatabaseType]string{base.DXDatabaseTypePostgreSQL: "geometry(Point, 4326)", base.DXDatabaseTypeSQLServer: "GEOGRAPHY", base.DXDatabaseTypeMariaDB: "POINT SRID 4326", base.DXDatabaseTypeOracle: "SDO_GEOMETRY"},
	}
)
View Source
var (
	DataTypes = []DataType{

		DataTypeString,
		DataTypeProtectedString,
		DataTypeProtectedSQLString,
		DataTypeProtectedNonEmptyString,
		DataTypeNullableString,
		DataTypeNonEmptyString,
		DataTypeEmail,
		DataTypePhoneNumber,
		DataTypeNPWP,

		DataTypeInt32,
		DataTypeInt32P,
		DataTypeInt32ZP,
		DataTypeNullableInt32,

		DataTypeInt64,
		DataTypeInt64P,
		DataTypeInt64ZP,
		DataTypeNullableInt64,

		DataTypeFloat32,
		DataTypeFloat32P,
		DataTypeFloat32ZP,

		DataTypeFloat64,
		DataTypeFloat64P,
		DataTypeFloat64ZP,

		DataTypeMoney,

		DataTypeBool,

		DataTypeISO8601,
		DataTypeDate,
		DataTypeTime,

		DataTypeJSON,
		DataTypeJSONPassthrough,

		DataTypeArray,
		DataTypeArrayString,
		DataTypeArrayInt64,
		DataTypeArrayJSONTemplate,
	}

	Types = map[APIParameterType]DataType{

		APIParameterTypeString:                  DataTypeString,
		APIParameterTypeProtectedString:         DataTypeProtectedString,
		APIParameterTypeProtectedSQLString:      DataTypeProtectedSQLString,
		APIParameterTypeProtectedNonEmptyString: DataTypeProtectedNonEmptyString,
		APIParameterTypeNullableString:          DataTypeNullableString,
		APIParameterTypeNonEmptyString:          DataTypeNonEmptyString,
		APIParameterTypeEmail:                   DataTypeEmail,
		APIParameterTypePhoneNumber:             DataTypePhoneNumber,
		APIParameterTypeNPWP:                    DataTypeNPWP,

		APIParameterTypeInt32:         DataTypeInt32,
		APIParameterTypeInt32P:        DataTypeInt32P,
		APIParameterTypeInt32ZP:       DataTypeInt32ZP,
		APIParameterTypeNullableInt32: DataTypeNullableInt32,
		APIParameterTypeInt64:         DataTypeInt64,
		APIParameterTypeInt64P:        DataTypeInt64P,
		APIParameterTypeInt64ZP:       DataTypeInt64ZP,
		APIParameterTypeNullableInt64: DataTypeNullableInt64,
		APIParameterTypeID:            DataTypeID,

		APIParameterTypeFloat32:   DataTypeFloat32,
		APIParameterTypeFloat32P:  DataTypeFloat32P,
		APIParameterTypeFloat32ZP: DataTypeFloat32ZP,

		APIParameterTypeFloat64:   DataTypeFloat64,
		APIParameterTypeFloat64P:  DataTypeFloat64P,
		APIParameterTypeFloat64ZP: DataTypeFloat64ZP,

		APIParameterTypeMoney: DataTypeMoney,

		APIParameterTypeBoolean: DataTypeBool,

		APIParameterTypeISO8601: DataTypeISO8601,
		APIParameterTypeDate:    DataTypeDate,
		APIParameterTypeTime:    DataTypeTime,

		APIParameterTypeJSON:            DataTypeJSON,
		APIParameterTypeJSONPassthrough: DataTypeJSONPassthrough,

		APIParameterTypeArray:             DataTypeArray,
		APIParameterTypeArrayString:       DataTypeArrayString,
		APIParameterTypeArrayInt64:        DataTypeArrayInt64,
		APIParameterTypeArrayJSONTemplate: DataTypeArrayJSONTemplate,

		APIParameterTypeMapStringString: DataTypeMapStringString,
	}
)

Functions

func GenerateUID

func GenerateUID() string

GenerateUID returns a collision-resistant, roughly time-sortable opaque id, generated in the application (no database round-trip). It is the Go equivalent of UIDDefaultExprPostgreSQL: lowercase hex of the current Unix time in microseconds, concatenated with a random UUIDv4 (dashed). ~52 chars — fits VARCHAR(255). Prefer this over a bare uuid for stored uids: the microsecond prefix makes a collision effectively impossible and keeps uids k-sortable (better index locality). The internal integer id, not this, is the FK key; this uid is the stable public handle (D-27) threaded across the async spine.

Types

type APIParameterType

type APIParameterType string
const (
	APIParameterTypeEncryptedBlob APIParameterType = "encrypted-blob"
	APIParameterTypeBlob          APIParameterType = "blob"

	// String types
	APIParameterTypeString                  APIParameterType = "string"
	APIParameterTypeProtectedString         APIParameterType = "protected-string"
	APIParameterTypeProtectedSQLString      APIParameterType = "protected-sql-string"
	APIParameterTypeProtectedNonEmptyString APIParameterType = "protected-non-empty-string"
	APIParameterTypeNullableString          APIParameterType = "nullable-string"
	APIParameterTypeNonEmptyString          APIParameterType = "non-empty-string"
	APIParameterTypeEmail                   APIParameterType = "email"
	APIParameterTypePhoneNumber             APIParameterType = "phonenumber"
	APIParameterTypeNPWP                    APIParameterType = "npwp"

	// Integer types
	APIParameterTypeInt32         APIParameterType = "int32"
	APIParameterTypeInt32P        APIParameterType = "int32p"
	APIParameterTypeInt32ZP       APIParameterType = "int32zp"
	APIParameterTypeNullableInt32 APIParameterType = "nullable-int32"
	APIParameterTypeInt64         APIParameterType = "int64"
	APIParameterTypeInt64P        APIParameterType = "int64p"
	APIParameterTypeInt64ZP       APIParameterType = "int64zp"
	APIParameterTypeNullableInt64 APIParameterType = "nullable-int64"
	APIParameterTypeID            APIParameterType = "id" // integer identifier / primary key (BIGINT / int64)

	// Float32 types
	APIParameterTypeFloat32   APIParameterType = "float32"
	APIParameterTypeFloat32P  APIParameterType = "float32p"
	APIParameterTypeFloat32ZP APIParameterType = "float32zp"

	// Float64 types
	APIParameterTypeFloat64   APIParameterType = "float64"
	APIParameterTypeFloat64P  APIParameterType = "float64p"
	APIParameterTypeFloat64ZP APIParameterType = "float64zp"

	// Money type — a fixed-point monetary amount stored as NUMERIC(23,4) (19 integer
	// digits + 4 decimals), carried as a JSON string for JS precision safety and as
	// shopspring decimal.Decimal in Go. Currency is metadata on the data-model field,
	// not part of the type. Distinct from the (unused, string-backed) "decimal" type.
	APIParameterTypeMoney APIParameterType = "money"

	// Boolean type
	APIParameterTypeBoolean APIParameterType = "bool"

	// Date/Time types
	APIParameterTypeISO8601 APIParameterType = "iso8601"
	APIParameterTypeDate    APIParameterType = "date"
	APIParameterTypeTime    APIParameterType = "time"

	// JSON types
	APIParameterTypeJSON            APIParameterType = "json"
	APIParameterTypeJSONPassthrough APIParameterType = "json-passthrough"

	// Array types
	APIParameterTypeArray             APIParameterType = "array"
	APIParameterTypeArrayString       APIParameterType = "array-string"
	APIParameterTypeArrayInt64        APIParameterType = "array-int64"
	APIParameterTypeArrayJSONTemplate APIParameterType = "array-json-template"

	// Map types
	APIParameterTypeMapStringString APIParameterType = "map-string-string"
)

type DataType

type DataType struct {
	Description                string // human-readable intended usage + peculiarity of this type
	APIParameterType           APIParameterType
	JSONType                   JSONType
	GoType                     GoType
	TypeByDatabaseType         map[base.DXDatabaseType]string // Database-specific SQL types
	DefaultValueByDatabaseType map[base.DXDatabaseType]string // Database-specific default values for this type
}

func GetDataTypeFromString

func GetDataTypeFromString(s string) (*DataType, error)

type GoType

type GoType string
const (
	GoTypeString                  GoType = "string"
	GoTypeStringPointer           GoType = "*string"
	GoTypeInt32                   GoType = "int32"
	GoTypeInt64                   GoType = "int64"
	GoTypeInt64Pointer            GoType = "*int64"
	GoTypeFloat32                 GoType = "float32"
	GoTypeFloat64                 GoType = "float64"
	GoTypeMoney                   GoType = "decimal.Decimal"
	GoTypeBool                    GoType = "bool"
	GoTypeTime                    GoType = "time.Time"
	GoTypeMapStringInterface      GoType = "map[string]interface{}"
	GoTypeSliceInterface          GoType = "[]interface{}"
	GoTypeSliceString             GoType = "[]string"
	GoTypeSliceInt64              GoType = "[]int64"
	GoTypeSliceByte               GoType = "[]byte"
	GoTypeSliceMapStringInterface GoType = "[]map[string]interface{}"
	GoTypeMapStringString         GoType = "map[string]string"
)

type JSONType

type JSONType string
const (
	JSONTypeString  JSONType = "string"
	JSONTypeNumber  JSONType = "number"
	JSONTypeBoolean JSONType = "boolean"
	JSONTypeObject  JSONType = "object"
	JSONTypeArray   JSONType = "array"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL