代码之家  ›  专栏  ›  技术社区  ›  Boris Barroso

在具有布尔值的Rails中为SQL视图创建迁移

  •  0
  • Boris Barroso  · 技术社区  · 15 年前

    IAM将sqlite用于如下视图:

    CREATE VIEW view_importaciones AS
          SELECT fecha_importacion, COUNT(DISTINCT(total)) - 1 AS total, COUNT(DISTINCT(errores)) -1 AS errores, estado FROM
            (
              SELECT fecha_importacion, id AS total, 0 as errores, estado FROM marcas WHERE parent_id = 0
              UNION
              SELECT fecha_importacion, 0 AS total, id as errores, estado FROM marcas WHERE valido = 'f' AND parent_id = 0
            ) AS importaciones GROUP BY fecha_importacion ORDER BY fecha_importacion
    

    如你所见 瓦利多='F' 是硬编码的,但我将来需要使用MySQL,我使用execute方法运行这个查询,如何为创建SQL视图的每个适配器“mysql、sqlite、postgresql等”创建正确的查询。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Boris Barroso    15 年前

    我找到了解决方案:

    # First create the sql needed with the parameters, this way
    # the query will change depeding on the database
    sql = Marca.send(:construct_finder_sql, 
                      :select => "fecha_importacion, 0 AS total, id AS errores, estado",
                      :conditions => { :valido => false, :parent_id => 0}
                      :group => "marcas.fecha_importacion"
                     )
    
    # Add the sql where needed
    sql = "CREATE VIEW view_importaciones AS
      SELECT fecha_importacion, COUNT(DISTINCT(total)) - 1 AS total, COUNT(DISTINCT(errores)) -1 AS errores, estado FROM
        (
          SELECT fecha_importacion, id AS total, 0 as errores, estado FROM marcas WHERE parent_id = 0
          UNION
          #{sql}
        ) AS importaciones GROUP BY fecha_importacion ORDER BY fecha_importacion"
    # Run the sql
    execute(sql)