Tabla de contenidos
El tipo de índice de celda QUADBIN temporal tquadbin representa el movimiento de los objetos como una secuencia de identificadores de celdas cuadradas QUADBIN. QUADBIN de CARTO es un sistema de cuadrícula cuadrada jerárquica construido sobre el esquema de teselas slippy-map (web-mercator): una única celda mundial en la resolución 0 se subdivide en cuatro hijos iguales en cada resolución más fina (hasta la resolución 26). Cada celda tiene un identificador entero de 64 bits que codifica una etiqueta de cabecera, la resolución y las coordenadas de tesela de la celda.
El tipo tquadbin comparte su representación en disco con tbigint: ambos almacenan un entero temporal de 64 bits. El tipo SQL distinto existe únicamente para que el verificador de tipos rechace las funciones específicas de QUADBIN cuando se aplican a trayectorias tbigint arbitrarias (y viceversa). Las conversiones desde y hacia tbigint son explícitas (AS ASSIGNMENT) y de coerción binaria solamente — sin coste en tiempo de ejecución pero requieren un :: explícito en SQL.
Como con otros tipos temporales, tquadbin tiene cuatro subtipos: Instant, secuencia discreta, secuencia continua con interpolación de pasos (las celdas QUADBIN son discretas — la interpolación lineal carece de sentido), y SequenceSet.
La guía operativa sobre cuándo elegir tquadbin en lugar de tgeompoint o tgeogpoint; los peligros específicos de QUADBIN que los consumidores deben anticipar (el orden int64 es arbitrario respecto a la geometría de la cuadrícula, la mezcla de resoluciones en las operaciones, el límite de latitud de web-mercator, y el comportamiento en el antimeridiano); y las convenciones de durabilidad y almacenamiento se recogen en “Notas operativas”.
Un valor tquadbin se introduce utilizando la sintaxis temporal estándar con el identificador de celda QUADBIN de 64 bits subyacente. El analizador acepta tanto la forma hexadecimal canónica como el equivalente en decimal sin signo. El hexadecimal es idiomático en el ecosistema QUADBIN y es lo que emite la función de salida — todos los ejemplos siguientes lo usan. Como referencia, el valor hexadecimal 480fffffffffffff empleado en los ejemplos es la celda mundial de resolución 0, igual al valor decimal 5192650370358181887.
SELECT tquadbin '480fffffffffffff@2001-01-01';
SELECT tquadbin '{480fffffffffffff@2001-01-01, 48427fffffffffff@2001-01-02}';
SELECT tquadbin '[480fffffffffffff@2001-01-01, 48427fffffffffff@2001-01-02]';
SELECT tquadbin '{[480fffffffffffff@2001-01-01, 48427fffffffffff@2001-01-02],
[48a6227affffffff@2001-01-03, 485623ffffffffff@2001-01-04]}';
El tipo acepta modificadores de tipo (typmod) para restringir una columna a un subtipo específico: Instant, Sequence, o SequenceSet.
SELECT tquadbin(Instant) '480fffffffffffff@2001-01-01';
SELECT tquadbin(SequenceSet) '{[480fffffffffffff@2001-01-01, 48427fffffffffff@2001-01-02]}';
-- ERROR: el tipo temporal (Instant) no coincide con el tipo de columna (Sequence)
SELECT tquadbin(Sequence) '480fffffffffffff@2001-01-01';