icoloma / appbuilder

Entorno de generación de Apps de Segittur
0 stars 0 forks source link

Migrar WebSQL a SQLite nativo #33

Closed jrvidal closed 11 years ago

jrvidal commented 11 years ago

El API de Storage de Phonegap, que es básicamente WebSQL, tiene una serie de limitaciones:

Una alternativa que elimina estos tres problemas es usar algún plugin que exponga en PhoneGap un API JavaScript para manipular directamente un SQLite nativo del dispositivo. Cosas a tener en cuenta:

De momento, el plugin que parece más interesante es https://github.com/pgsqlite.

jrvidal commented 11 years ago

No es una solución, pero quizá es interesante mencionarlo: http://html5sql.com/ Carga una lista de SQL statements desde javascript, supuestamente con buen rendimiento.

jrvidal commented 11 years ago

He sido capaz de hacer funcionar pgsqlite para que cargue una BDD SQLite.

Esta funcionalidad no la trae por defecto el plugin, sino que hay que añadir algo de código a mano. Existe un fork (un poco anticuado) donde implementan esto para Android, y explican de dónde sacan el código (que incluye iOS también).

jrvidal commented 11 years ago

Relacionado con #9.

Para seguir usando persistence.js [1], necesitamos adaptar nuestro esquema de volcado de la BDD sqlite a la estructura que esta librería monta cuando persiste entidades.

En particular, todas las entidades tienen que tener una clave primaria id de tipo VARCHAR(32). Adjunto un log del SQL que se ejecuta al definir una nueva entidad:

CREATE TABLE IF NOT EXISTS `Foo` (`foobar` TEXT, `id` VARCHAR(32) PRIMARY KEY) 

Por cierto, que esto supone acoplarnos al funcionamiento interno de la librería. :confused:

ehdez73 commented 11 years ago

Adaptar el id a VARCHAR(32) no es problema.

Por un lado se podría guardar el id del objeto tal cual ya que el ObjectId de Mongo tiene una longitud inferior. pero a la hora de realizar los test de exportación se utiliza UUID para generar los id de forma aleatoria (no se utiliza Mongo), y es aquí donde tiene una longitud superior.

Para que funcione en los dos casos se puede exportar el campo id del Poi como "idPoi" y añado un campo "id" nuevo para la base de datos con valores autoincrementales. De esta forma se desacoplaría el id de la tabla SQLite con el id de MongoDB

Habrá que ver si realmente hará falta el campo idPoi , en caso contrario se puede eliminar.

jrvidal commented 11 years ago
ehdez73 commented 11 years ago

El test está hecho para comprobar que se exporta correctamente, no está ideado para exportar una gran cantidad de datos. Puedes generar esa exportación usando la propia aplicación web, para ello ejecuta previamente la clase MongoDbPopulator.java ( que la puedes configurar con el número de POIs que quieres ) y despliega la aplicación en el tcServer que viene integrado con el STS. Accede a http://localhost:8080/opencatalog/admin/exporter