scanner

package module
v0.0.0-...-efc0e93 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 19, 2023 License: MIT Imports: 5 Imported by: 0

README

Scanner

Scanner is utils for scan data of slice values

Example:

package main

import (
	"database/sql"
	"encoding/json"
	"fmt"
	"os"

	"github.com/jackc/pgx/v5"
	"github.com/jackc/pgx/v5/stdlib"
	"github.com/moisespsena-go/scanner"
)

func main() {
	config, err := pgx.ParseConfig("postgres://postgres:1@127.0.0.1:5432/cp-prod")
	if err != nil {
		panic(err)
	}

	conn := stdlib.OpenDB(*config)
	defer conn.Close()

	var rows *sql.Rows
	if rows, err = conn.Query("SELECT generate_series as user__count FROM generate_series(1, 5)"); err != nil {
		panic(err)
	}

	defer rows.Close()

	fmt.Println(
		scanner.SqlRowsLoop(rows,
			scanner.LimitedIterator(
				2,
				scanner.SqlRowsIterator(rows),
			),
			scanner.NewSlice(
				scanner.NewRecordMapHandler(scanner.RawRowsHandler).
					WithTypes(map[string]any{
						"user": map[string]any{
							"count": 0,
						},
					}),
				0,
				1),
			json.NewEncoder(os.Stdout).Encode,
		),
	)
}

Outputs:

{"user":{"count":1}}
{"user":{"count":2}}
<nil>

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Break = errors.New("break")
View Source
var RawRowsHandler = RowsHandlerFunc(func([]string) RowInitializer {
	return RowInitializerFunc(func(_ []string, dst []any) (record func(dst []any) (_ any, err error), err error) {
		RawRowScanner(dst)
		return func(dst []any) (_ any, err error) {
			return dst, nil
		}, nil
	})
})

Functions

func DiscardValuer

func DiscardValuer() sql.Scanner

func Loop

func Loop(scanner Scanner, columns []string, it Iterator, initializer RowInitializer, cb func(record any) error) (err error)

func RawRowScanner

func RawRowScanner(dst []any)

func RawValueScanner

func RawValueScanner(dst []any, index int) sql.Scanner

func SqlRowsLoop

func SqlRowsLoop(rows *sql.Rows, it Iterator, factory RowFactory, cb func(record any) error) (err error)

Types

type Iterator

type Iterator interface {
	Next() error
}

func LimitedIterator

func LimitedIterator(maxRows int, next Iterator) Iterator

func SqlRowsIterator

func SqlRowsIterator(rows *sql.Rows) Iterator

type IteratorFunc

type IteratorFunc func() error

func (IteratorFunc) Next

func (f IteratorFunc) Next() error

type Map

type Map struct {
	// contains filtered or unexported fields
}

func NewRecordMapHandler

func NewRecordMapHandler(next RowsHandler) *Map

func (*Map) Factory

func (s *Map) Factory(columns []string) RowInitializer

func (*Map) IgnoreUndefineds

func (r *Map) IgnoreUndefineds() *Map

func (*Map) IsIgnoreUndefineds

func (r *Map) IsIgnoreUndefineds() bool

func (*Map) NewInitializer

func (r *Map) NewInitializer(columns []string) RowInitializer

func (*Map) Pipe

func (r *Map) Pipe(to func(next RowsHandler) RowsHandler) RowsHandler

func (*Map) SetIgnoreUndefineds

func (r *Map) SetIgnoreUndefineds(ignoreUndefineds bool) *Map

func (*Map) Types

func (r *Map) Types() RecordMap

func (*Map) WithTypes

func (r *Map) WithTypes(types RecordMap) *Map

type RawRowScann

type RawRowScann struct {
}

func (RawRowScann) Row

func (RawRowScann) Row(_ []string, dst []any) (record func(dst []any) (_ any, err error), err error)

type RecordMap

type RecordMap map[string]any

func (RecordMap) Get

func (m RecordMap) Get(key string) (val any, ok bool)

func (RecordMap) GetDefault

func (m RecordMap) GetDefault(key string, defaul any) (val any, ok bool)

func (RecordMap) Map

func (m RecordMap) Map(cb func(key string, val any) any)

func (RecordMap) Set

func (m RecordMap) Set(key string, val any)

func (RecordMap) SetIfExists

func (m RecordMap) SetIfExists(key string, val any)

func (RecordMap) Walk

func (m RecordMap) Walk(cb func(key string, val any))

func (RecordMap) WalkSep

func (m RecordMap) WalkSep(sep string, cb func(key string, val any))

type RowFactory

type RowFactory interface {
	Factory(columns []string) RowInitializer
}

type RowFactoryFunc

type RowFactoryFunc func(columns []string) RowInitializer

func (RowFactoryFunc) Factory

func (f RowFactoryFunc) Factory(columns []string) RowInitializer

type RowInitializer

type RowInitializer interface {
	InitRow(columns []string, dst []any) (record func(dst []any) (_ any, err error), err error)
	Pipe(to func(next RowInitializer) RowInitializer) RowInitializer
}

type RowInitializerFunc

type RowInitializerFunc func(columns []string, dst []any) (record func(dst []any) (_ any, err error), err error)

func (RowInitializerFunc) InitRow

func (f RowInitializerFunc) InitRow(columns []string, dst []any) (record func(dst []any) (_ any, err error), err error)

func (RowInitializerFunc) Pipe

type RowScanContext

type RowScanContext struct {
	Columns []string
	Values  []any
	Value   any
}

type RowScanner

type RowScanner struct {
	// contains filtered or unexported fields
}

type RowsHandler

type RowsHandler interface {
	NewInitializer(columns []string) RowInitializer
	Pipe(to func(next RowsHandler) RowsHandler) RowsHandler
}

type RowsHandlerFunc

type RowsHandlerFunc func(columns []string) RowInitializer

func (RowsHandlerFunc) NewInitializer

func (f RowsHandlerFunc) NewInitializer(columns []string) RowInitializer

func (RowsHandlerFunc) Pipe

func (f RowsHandlerFunc) Pipe(to func(next RowsHandler) RowsHandler) RowsHandler

type Scanner

type Scanner interface {
	Scan(values ...any) error
}

type ScannerFunc

type ScannerFunc func(values ...any) error

func (ScannerFunc) Scan

func (f ScannerFunc) Scan(values ...any) error

type Slice

type Slice struct {
	Next          RowsHandler
	Start, Length int
}

func NewSlice

func NewSlice(next RowsHandler, start int, length int) *Slice

func (*Slice) Factory

func (s *Slice) Factory(columns []string) RowInitializer

func (*Slice) NewInitializer

func (s *Slice) NewInitializer(columns []string) RowInitializer

func (*Slice) Pipe

func (s *Slice) Pipe(to func(next RowsHandler) RowsHandler) RowsHandler

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL