jet/internal/jet/column_expression_geometry_impl.go
Eli Ribble 41fe97d336
Fix the imports I botched really badly
Apparently I don't understand how go modules work.
2026-05-14 20:56:20 +00:00

109 lines
2.7 KiB
Go

package jet
import (
"source.gleipnir.technology/Gleipnir/jet/v2/internal/3rdparty/snaker"
)
// ColumnExpressionGeometryImpl is base type for sql columns.
type ColumnExpressionGeometryImpl struct {
ExpressionInterfaceImpl
name string
tableName string
subQuery SelectTable
}
// Name returns name of the column
func (c *ColumnExpressionGeometryImpl) Name() string {
return c.name
}
// TableName returns column table name
func (c *ColumnExpressionGeometryImpl) TableName() string {
return c.tableName
}
func (c *ColumnExpressionGeometryImpl) setTableName(table string) {
c.tableName = table
}
func (c *ColumnExpressionGeometryImpl) setSubQuery(subQuery SelectTable) {
c.subQuery = subQuery
}
func (c *ColumnExpressionGeometryImpl) defaultAlias() string {
if c.tableName != "" {
return c.tableName + "." + c.name
}
return c.name
}
func (c *ColumnExpressionGeometryImpl) serializeForOrderBy(statement StatementType, out *SQLBuilder) {
if statement == SetStatementType {
// set Statement (UNION, EXCEPT ...) can reference only select projections in order by clause
out.WriteAlias(c.defaultAlias()) //always quote
return
}
c.serialize(statement, out)
}
func (c *ColumnExpressionGeometryImpl) serializeForProjection(statement StatementType, out *SQLBuilder) {
c.serialize(statement, out)
out.WriteString("AS")
out.WriteAlias(c.defaultAlias())
}
func (c *ColumnExpressionGeometryImpl) serializeForJsonObjEntry(statement StatementType, out *SQLBuilder) {
out.WriteJsonObjKey(snaker.SnakeToCamel(c.name, false))
c.Root.serializeForJsonValue(statement, out)
}
func (c *ColumnExpressionGeometryImpl) serializeForRowToJsonProjection(statement StatementType, out *SQLBuilder) {
c.Root.serializeForJsonValue(statement, out)
out.WriteString("AS")
out.WriteAlias(snaker.SnakeToCamel(c.name, false))
}
func (c *ColumnExpressionGeometryImpl) serialize(statement StatementType, out *SQLBuilder, options ...SerializeOption) {
if c.subQuery != nil {
out.WriteString("ST_AsGeoJSON(")
out.WriteIdentifier(c.subQuery.Alias())
out.WriteByte('.')
out.WriteIdentifier(c.defaultAlias())
out.WriteString(")")
} else {
//out.WriteString("ST_AsGeoJSON(")
if c.tableName != "" && !contains(options, ShortName) {
out.WriteIdentifier(c.tableName)
out.WriteByte('.')
}
out.WriteIdentifier(c.name)
//out.WriteString(")")
}
}
func NewColumnGeometryImpl(name string, tableName string, root ColumnExpression) *ColumnExpressionGeometryImpl {
newColumn := &ColumnExpressionGeometryImpl{
name: name,
tableName: tableName,
}
if root != nil {
newColumn.ExpressionInterfaceImpl.Root = root
} else {
newColumn.ExpressionInterfaceImpl.Root = newColumn
}
return newColumn
}