una tabla seleccionar obtener datos scala tuples slick scala-2.11

scala - seleccionar - ¿Cómo puedo manejar una tabla de> 22 columnas con Slick usando tuplas anidadas o HLists?



obtener datos de una tabla html javascript (2)

Soy nuevo en Scala (con 2.10) y Slick (con 2.0-M2). Veo que una de las maneras de sortear el límite de 22 columnas para las tablas en Slick es usar tuplas anidadas. No puedo averiguar cómo hacerlo, a pesar de encontrar este código parcial en GitHub .

La rama de desarrollo actual Scala (2.11-M5) admite clases de casos con más de 22 elementos, pero no tuplas con aridad> 22. Y Slick aún no se distribuye para las versiones preliminares de Scala 2.11. ¿Cómo puedo definir una tabla de 33 columnas (y hacer que funcione con todo el azúcar sintáctico de Slick)?

NB, estoy intentando admitir un esquema existente y no puedo cambiar la normalización de la tabla.


Aquí escribo un post para dar a conocer la solución. Aquí está el enlace: https://lihaimei.wordpress.com/2016/03/30/slick-1-fix-more-than-22-columns-case/

Dibujé algunos gráficos y uso diferentes colores para ayudarte a entender rápidamente.

Para resumir, uso una clase de caso adicional para empaquetar algunas columnas en una, lo que no influirá en las columnas físicas reales. Y luego, cuando usamos la proyección para mapear a un tipo personalizado, involucramos la tupla atrás. Esta es una solución de pirateo, pero es fácil de arreglar el límite del lenguaje de programación Scala donde el tamaño de las tuplas debe ser inferior a 22.


El código de prueba al que está vinculado no está actualizado. Si no usa mapeos para sus tablas, es sencillo: el tipo de * corresponde al tipo de retorno que obtiene al consultar la tabla, ya sea una tupla simple, una lista HL o tuplas anidadas. Desde Slick 2.1 esto funciona para todas las operaciones. (En 2.0 no era compatible con la proyección * , por lo que tenía que definir una proyección alternativa y anular create_* ). Consulte here para ver un ejemplo de HList.

Si desea asignar la proyección * a un tipo personalizado, también usa el operador <> como para una sola tupla, pero no obtiene la conveniencia de los métodos tupled y no unapply que se generan automáticamente para las clases de casos, por lo que tiene para escribir las dos funciones de mapeo (desde el no mapeado al tipo mapeado y viceversa) manualmente como se muestra here . Tenga en cuenta que Scala 2.11 no mejora esta situación. Si bien permite clases de casos con más de 22 campos, no hay tipos de Function correspondientes para aridades> 22, por lo que aún no puede usar tupled y no unapply .

Como alternativa a escribir estas funciones, puede definir un tipo elevado correspondiente a su tipo mapeado como se explica en el manual . Esto es especialmente útil cuando tiene clases de casos anidadas (de <= 22 campos cada una) para su tipo mapeado. Solo tiene que definir asignaciones separadas para cada clase de caso y se compondrán automáticamente cuando las use en una * proyección (o cualquier otro lugar en una proyección o consulta).