Squeryl 带postgres后端的Squiryl geo查询?

Squeryl 带postgres后端的Squiryl geo查询?,squeryl,Squeryl,如何使用带有postgres后端的Squiryl执行地理查询?我想运行的查询类型是“返回x公里内的所有用户”,等等 如果不直接/通过插件支持地理查询,如何运行原始SQL查询?我看到一个要点,看起来很复杂 更新 具体而言,我希望运行以下查询: SELECT events.id, events.name FROM events WHERE earth_box( {current_user_lat}, {current_user_lng}, {radius_in_metres}) @>

如何使用带有postgres后端的Squiryl执行地理查询?我想运行的查询类型是“返回x公里内的所有用户”,等等

如果不直接/通过插件支持地理查询,如何运行原始SQL查询?我看到一个要点,看起来很复杂

更新 具体而言,我希望运行以下查询:

SELECT events.id, events.name FROM events 
WHERE earth_box( {current_user_lat}, {current_user_lng}, 
  {radius_in_metres}) @> ll_to_earth(events.lat, events.lng);

这是取自

此对象应能解决您的问题

object object RawSql {

  def q(query: String, args: Any*) =
    new RawTupleQuery(query, args)

  class RawTupleQuery(query: String, args: Seq[Any]) {

    private def prep = {

      val s = Session.currentSession

      val st = s.connection.prepareStatement(query)

      def unwrap(o: Any) = o match {
    case None => null
    case Some(ob) => ob.asInstanceOf[AnyRef]
    case null => null
    case a@AnyRef => a
    case a@_ => a
      }

      for(z <- args.zipWithIndex) {
    st.setObject(z._2 + 1, unwrap(z._1))
      }

      st
    }

    def toSeq[A1]()(implicit f1 : TypedExpressionFactory[A1,_]) = {

      val st = prep
      val rs = st.executeQuery

      try {

    val ab = new ArrayBuffer[A1]

    val m1 = f1.thisMapper.asInstanceOf[PrimitiveJdbcMapper[A1]]

    while(rs.next)
      ab.append(m1.convertFromJdbc(m1.extractNativeJdbcValue(rs, 1)))

    ab
      }
      finally {
    rs.close()
    st.close()
      }
    }

    def toTupleSeq[A1,A2]()(implicit f1 : TypedExpressionFactory[A1,_], f2 : TypedExpressionFactory[A2,_]) = {

      val st = prep
      val rs = st.executeQuery

      try {

    val ab = new ArrayBuffer[(A1,A2)]

    val m1 = f1.thisMapper.asInstanceOf[PrimitiveJdbcMapper[A1]]
    val m2 = f2.thisMapper.asInstanceOf[PrimitiveJdbcMapper[A2]]

    while(rs.next)
      ab.append(
        (m1.convertFromJdbc(m1.extractNativeJdbcValue(rs, 1)),
          m2.convertFromJdbc(m2.extractNativeJdbcValue(rs, 2))))
    ab
      }
      finally {
    rs.close()
    st.close()
      }
    }
  }
}
对象RawSql{
def q(查询:字符串,参数:任意*)=
新的RawTupleQuery(查询,参数)
类RawTupleQuery(查询:字符串,参数:Seq[Any]){
专用def准备={
val s=Session.currentSession
val st=s.connection.prepareStatement(查询)
def展开(o:Any)=o匹配{
case None=>null
案例部分(ob)=>ob.asInstanceOf[AnyRef]
大小写null=>null
案例a@AnyRef=>a
案例a@_=>a
}

例如(z Squeryl是“用于与数据库对话的Scala ORM和DSL”。您希望将哪个SQL查询转换为squeryl语句?我想给出的提示是:如果数据库无法解决您的问题,那么squeryl也无法解决这些问题。@VasyaNovikov我已用我要执行的特定查询更新了我的问题。然后,您的问题似乎是关于使用自定义函数的我从来没有用过这个,但似乎Squiryl有一段关于这个的话:也许会有帮助。如果没有,也许你应该提出一个单独的问题(人们可能跳过了这个问题,不理解“地理”目标).好的,谢谢。那个自定义函数页面看起来很相关。我还没有测试过这个。我想我会用doobie来代替它,因为它捆绑了对postgis的支持。