//
// Code generated by go-jet DO NOT EDIT.
//
// WARNING: Changes to this file may cause incorrect behavior
// and will be lost if the code is regenerated
//

package table

import (
	"github.com/Gleipnir-Technology/jet/postgres"
)

var Pool = newPoolTable("fileupload", "pool", "")

type poolTable struct {
	postgres.Table

	// Columns
	AddressPostalCode      postgres.ColumnString
	AddressStreet          postgres.ColumnString
	Committed              postgres.ColumnBool
	Created                postgres.ColumnTimestamp
	CreatorID              postgres.ColumnInteger
	CsvFile                postgres.ColumnInteger
	Deleted                postgres.ColumnTimestamp
	Geom                   postgres.ColumnGeometry
	H3cell                 postgres.ColumnString
	ID                     postgres.ColumnInteger
	IsInDistrict           postgres.ColumnBool
	IsNew                  postgres.ColumnBool
	Notes                  postgres.ColumnString
	PropertyOwnerName      postgres.ColumnString
	PropertyOwnerPhoneE164 postgres.ColumnString
	ResidentOwned          postgres.ColumnBool
	ResidentPhoneE164      postgres.ColumnString
	LineNumber             postgres.ColumnInteger
	Tags                   postgres.ColumnString
	AddressNumber          postgres.ColumnString
	AddressLocality        postgres.ColumnString
	AddressRegion          postgres.ColumnString
	Condition              postgres.ColumnString
	AddressID              postgres.ColumnInteger

	AllColumns     postgres.ColumnList
	MutableColumns postgres.ColumnList
	DefaultColumns postgres.ColumnList
}

type PoolTable struct {
	poolTable

	EXCLUDED poolTable
}

// AS creates new PoolTable with assigned alias
func (a PoolTable) AS(alias string) *PoolTable {
	return newPoolTable(a.SchemaName(), a.TableName(), alias)
}

// Schema creates new PoolTable with assigned schema name
func (a PoolTable) FromSchema(schemaName string) *PoolTable {
	return newPoolTable(schemaName, a.TableName(), a.Alias())
}

// WithPrefix creates new PoolTable with assigned table prefix
func (a PoolTable) WithPrefix(prefix string) *PoolTable {
	return newPoolTable(a.SchemaName(), prefix+a.TableName(), a.TableName())
}

// WithSuffix creates new PoolTable with assigned table suffix
func (a PoolTable) WithSuffix(suffix string) *PoolTable {
	return newPoolTable(a.SchemaName(), a.TableName()+suffix, a.TableName())
}

func newPoolTable(schemaName, tableName, alias string) *PoolTable {
	return &PoolTable{
		poolTable: newPoolTableImpl(schemaName, tableName, alias),
		EXCLUDED:  newPoolTableImpl("", "excluded", ""),
	}
}

func newPoolTableImpl(schemaName, tableName, alias string) poolTable {
	var (
		AddressPostalCodeColumn      = postgres.StringColumn("address_postal_code")
		AddressStreetColumn          = postgres.StringColumn("address_street")
		CommittedColumn              = postgres.BoolColumn("committed")
		CreatedColumn                = postgres.TimestampColumn("created")
		CreatorIDColumn              = postgres.IntegerColumn("creator_id")
		CsvFileColumn                = postgres.IntegerColumn("csv_file")
		DeletedColumn                = postgres.TimestampColumn("deleted")
		GeomColumn                   = postgres.GeometryColumn("geom")
		H3cellColumn                 = postgres.StringColumn("h3cell")
		IDColumn                     = postgres.IntegerColumn("id")
		IsInDistrictColumn           = postgres.BoolColumn("is_in_district")
		IsNewColumn                  = postgres.BoolColumn("is_new")
		NotesColumn                  = postgres.StringColumn("notes")
		PropertyOwnerNameColumn      = postgres.StringColumn("property_owner_name")
		PropertyOwnerPhoneE164Column = postgres.StringColumn("property_owner_phone_e164")
		ResidentOwnedColumn          = postgres.BoolColumn("resident_owned")
		ResidentPhoneE164Column      = postgres.StringColumn("resident_phone_e164")
		LineNumberColumn             = postgres.IntegerColumn("line_number")
		TagsColumn                   = postgres.StringColumn("tags")
		AddressNumberColumn          = postgres.StringColumn("address_number")
		AddressLocalityColumn        = postgres.StringColumn("address_locality")
		AddressRegionColumn          = postgres.StringColumn("address_region")
		ConditionColumn              = postgres.StringColumn("condition")
		AddressIDColumn              = postgres.IntegerColumn("address_id")
		allColumns                   = postgres.ColumnList{AddressPostalCodeColumn, AddressStreetColumn, CommittedColumn, CreatedColumn, CreatorIDColumn, CsvFileColumn, DeletedColumn, GeomColumn, H3cellColumn, IDColumn, IsInDistrictColumn, IsNewColumn, NotesColumn, PropertyOwnerNameColumn, PropertyOwnerPhoneE164Column, ResidentOwnedColumn, ResidentPhoneE164Column, LineNumberColumn, TagsColumn, AddressNumberColumn, AddressLocalityColumn, AddressRegionColumn, ConditionColumn, AddressIDColumn}
		mutableColumns               = postgres.ColumnList{AddressPostalCodeColumn, AddressStreetColumn, CommittedColumn, CreatedColumn, CreatorIDColumn, CsvFileColumn, DeletedColumn, GeomColumn, H3cellColumn, IsInDistrictColumn, IsNewColumn, NotesColumn, PropertyOwnerNameColumn, PropertyOwnerPhoneE164Column, ResidentOwnedColumn, ResidentPhoneE164Column, LineNumberColumn, TagsColumn, AddressNumberColumn, AddressLocalityColumn, AddressRegionColumn, ConditionColumn, AddressIDColumn}
		defaultColumns               = postgres.ColumnList{IDColumn}
	)

	return poolTable{
		Table: postgres.NewTable(schemaName, tableName, alias, allColumns...),

		//Columns
		AddressPostalCode:      AddressPostalCodeColumn,
		AddressStreet:          AddressStreetColumn,
		Committed:              CommittedColumn,
		Created:                CreatedColumn,
		CreatorID:              CreatorIDColumn,
		CsvFile:                CsvFileColumn,
		Deleted:                DeletedColumn,
		Geom:                   GeomColumn,
		H3cell:                 H3cellColumn,
		ID:                     IDColumn,
		IsInDistrict:           IsInDistrictColumn,
		IsNew:                  IsNewColumn,
		Notes:                  NotesColumn,
		PropertyOwnerName:      PropertyOwnerNameColumn,
		PropertyOwnerPhoneE164: PropertyOwnerPhoneE164Column,
		ResidentOwned:          ResidentOwnedColumn,
		ResidentPhoneE164:      ResidentPhoneE164Column,
		LineNumber:             LineNumberColumn,
		Tags:                   TagsColumn,
		AddressNumber:          AddressNumberColumn,
		AddressLocality:        AddressLocalityColumn,
		AddressRegion:          AddressRegionColumn,
		Condition:              ConditionColumn,
		AddressID:              AddressIDColumn,

		AllColumns:     allColumns,
		MutableColumns: mutableColumns,
		DefaultColumns: defaultColumns,
	}
}
