Base de datos
Permite ejecutar consultas SQL, uniones (joins) y agregaciones sobre las tablas de WordPress mediante replicación en una base de datos efímera SQLite3 en memoria, separando las consultas analíticas de la base de datos MySQL activa.
La extensión de PHP SQLite3 debe estar instalada y habilitada en el servidor para que el servicio Database funcione con todas sus capacidades. Si SQLite3 no está disponible, Database.mirror() conserva los resultados en el búfer interno y fetch() los recupera del historial, pero Database.query() lanzará una excepción.
Replicación de datos (mirroring)
Database.mirror()
Copia los registros de una tabla de WordPress en una base de datos SQLite en memoria con ámbito limitado a la petición activa (request scope). Esta base de datos se destruye en cuanto finaliza la evaluación de la expresión actual.
Database.mirror(
string:table,
array|object|null:where = [],
array|object|null:options = null
): Database
Parámetros
table(string, requerido): El nombre de la tabla a replicar sin prefijo (por ejemplo,'posts','users','postmeta').where(array|object|null, opcional): Condiciones de filtrado mediante estructuras recursivas, operadores de comparación o joins en el sitio. El valor predeterminado es[](replica toda la tabla hasta los límites del búfer).options(array|object|null, opcional): Opciones de configuración para selección de columnas, ordenamiento, límites de paginación y prefijos. Consulta Opciones de Configuración de Replicación.
Uso básico
Supongamos que deseas obtener todas las entradas de la tabla wp_posts. Puedes utilizar cualquiera de las siguientes expresiones:
Database.mirror('posts').fetch()
Database.mirror('posts').flush()
Los métodos encadenados fetch() y flush() recuperan los datos replicados y los devuelven como un arreglo de objetos. La diferencia es que flush() libera el búfer de SQLite (elimina y reinicializa la base de datos en memoria, limpiando el historial de consultas) mientras que fetch() conserva los datos en memoria para operaciones posteriores.
Los prefijos de tabla (como wp_) se resuelven según el entorno. En instalaciones de WordPress Multisite, Database.mirror aplica el prefijo del blog actual (por ejemplo, wp_2_) para tablas específicas del sitio y el prefijo base (por ejemplo, wp_) para tablas globales (users, usermeta y cualquier ms_global_tables registrada).
Al replicar una tabla grande sin especificar un limit explícito (por ejemplo, Database.mirror('posts').fetch()), Expression Lab limita la consulta al límite de búfer disponible (1.000 filas de forma predeterminada) y muestra una notificación de advertencia en la Consola.
Esto permite un muestreo exploratorio instantáneo en tablas grandes de producción (por ejemplo, más de 50.000 publicaciones) sin desencadenar excepciones de seguridad de memoria. Para recuperar un conjunto de datos más grande, aumenta el búfer con Database.buffer(50000) o proporciona una opción limit explícita.
Llamar a Database.mirror() varias veces en la misma tabla (por ejemplo, 'posts') reemplaza el esquema y las filas de la tabla SQLite en memoria con la última consulta. No agrega filas ni se comporta como un UNION ALL de SQL.
- Para consultar múltiples tipos/estados en una sola tabla: Utiliza una sola llamada
mirror()con un operador$ino un arregloOR(por ejemplo,{ post_type: { '$in': ['post', 'page'] } }). - Para mantener múltiples instantáneas independientes de la misma tabla: Utiliza la opción
aspara asignar nombres de tabla personalizados en SQLite (por ejemplo,{ as: 'my_posts' }y{ as: 'my_pages' }). - Para combinar diferentes tablas: Replica tablas distintas (por ejemplo,
posts,users,postmeta) para realizar operaciones relacionalesJOINentre ellas enDatabase.query().
Sintaxis del parámetro WHERE
El parámetro where en Database.mirror() admite una sintaxis de filtrado recursiva y expresiva basada en las convenciones de Symfony Expression Language. Las condiciones se compilan en consultas MySQL parametrizadas ($wpdb->prepare) antes de replicar los datos en SQLite.