github.com/altipla-consulting/ravendb-go-client@v0.1.3/order_by_token.go (about) 1 package ravendb 2 3 import "strings" 4 5 var _ queryToken = &orderByToken{} 6 7 var ( 8 orderByTokenRandom = newOrderByToken("random()", false, OrderingTypeString) 9 orderByTokenScoreAscending = newOrderByToken("score()", false, OrderingTypeString) 10 orderByTokenScoreDescending = newOrderByToken("score()", true, OrderingTypeString) 11 ) 12 13 type orderByToken struct { 14 fieldName string 15 descending bool 16 ordering OrderingType 17 } 18 19 func newOrderByToken(fieldName string, descending bool, ordering OrderingType) *orderByToken { 20 return &orderByToken{ 21 fieldName: fieldName, 22 descending: descending, 23 ordering: ordering, 24 } 25 } 26 27 func orderByTokenCreateDistanceAscending(fieldName string, latitudeParameterName string, longitudeParameterName string) *orderByToken { 28 return newOrderByToken("spatial.distance("+fieldName+", spatial.point($"+latitudeParameterName+", $"+longitudeParameterName+"))", false, OrderingTypeString) 29 } 30 31 func orderByTokenCreateDistanceAscending2(fieldName string, shapeWktParameterName string) *orderByToken { 32 return newOrderByToken("spatial.distance("+fieldName+", spatial.wkt($"+shapeWktParameterName+"))", false, OrderingTypeString) 33 } 34 35 func orderByTokenCreateDistanceDescending(fieldName string, latitudeParameterName string, longitudeParameterName string) *orderByToken { 36 return newOrderByToken("spatial.distance("+fieldName+", spatial.point($"+latitudeParameterName+", $"+longitudeParameterName+"))", true, OrderingTypeString) 37 } 38 39 func orderByTokenCreateDistanceDescending2(fieldName string, shapeWktParameterName string) *orderByToken { 40 return newOrderByToken("spatial.distance("+fieldName+", spatial.wkt($"+shapeWktParameterName+"))", true, OrderingTypeString) 41 } 42 43 func orderByTokenCreateRandom(seed string) *orderByToken { 44 if seed == "" { 45 panicIf(true, "seed cannot be null") 46 // newIllegalArgumentError("seed cannot be null"); 47 } 48 seed = strings.Replace(seed, "'", "''", -1) 49 return newOrderByToken("random('"+seed+"')", false, OrderingTypeString) 50 } 51 52 func orderByTokenCreateAscending(fieldName string, ordering OrderingType) *orderByToken { 53 return newOrderByToken(fieldName, false, ordering) 54 } 55 56 func orderByTokenCreateDescending(fieldName string, ordering OrderingType) *orderByToken { 57 return newOrderByToken(fieldName, true, ordering) 58 } 59 60 func (t *orderByToken) writeTo(writer *strings.Builder) error { 61 writeQueryTokenField(writer, t.fieldName) 62 63 switch t.ordering { 64 case OrderingTypeLong: 65 writer.WriteString(" as long") 66 case OrderingTypeDouble: 67 writer.WriteString(" as double") 68 case OrderingTypeAlphaNumeric: 69 writer.WriteString(" as alphaNumeric") 70 } 71 72 if t.descending { // we only add this if we have to, ASC is the default and reads nicer 73 writer.WriteString(" desc") 74 } 75 return nil 76 }