Some checks failed
Build Push and Restart Compose / deploy (push) Failing after 1m47s
- `github.com/lib/pq` PostgreSQL 드라이버 vendor 디렉토리에 추가. - PostgreSQL 관련 내부 패키지(`pqsql`, `proto`, `pqtime`, `pgpass`, `pgservice`, `pqutil`) 구현: - SQL 어휘 처리, 프로토콜 상수 및 구조 정의, 시간 파서/포맷터(`Parse`, `Format`). - `.pgpass` 파일 및 `pg_service.conf` 관리 기능 추가. - 파일/사용자 권한 검증 및 플랫폼별 사용자 정보 조회 기능 포함. - 데이터베이스 초기화 로직 추가 (`services/db.go`): - PostgreSQL 연결 설정 및 초기 스키마 생성. - 자동매매 관련 DB 레포지토리(`services/autotrade_repo.go`) 구현: - 자동매매 규칙 및 포지션 관리 로직 추가 (`dbInsertRule`, `dbLoadRules` 등).
101 lines
1.9 KiB
Go
101 lines
1.9 KiB
Go
package pq
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/binary"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/lib/pq/internal/proto"
|
|
"github.com/lib/pq/oid"
|
|
)
|
|
|
|
type readBuf []byte
|
|
|
|
func (b *readBuf) int32() (n int) {
|
|
n = int(int32(binary.BigEndian.Uint32(*b)))
|
|
*b = (*b)[4:]
|
|
return
|
|
}
|
|
|
|
func (b *readBuf) oid() (n oid.Oid) {
|
|
n = oid.Oid(binary.BigEndian.Uint32(*b))
|
|
*b = (*b)[4:]
|
|
return
|
|
}
|
|
|
|
// N.B: this is actually an unsigned 16-bit integer, unlike int32
|
|
func (b *readBuf) int16() (n int) {
|
|
n = int(binary.BigEndian.Uint16(*b))
|
|
*b = (*b)[2:]
|
|
return
|
|
}
|
|
|
|
func (b *readBuf) string() string {
|
|
i := bytes.IndexByte(*b, 0)
|
|
if i < 0 {
|
|
panic(errors.New("pq: invalid message format; expected string terminator"))
|
|
}
|
|
s := (*b)[:i]
|
|
*b = (*b)[i+1:]
|
|
return string(s)
|
|
}
|
|
|
|
func (b *readBuf) next(n int) (v []byte) {
|
|
v = (*b)[:n]
|
|
*b = (*b)[n:]
|
|
return
|
|
}
|
|
|
|
func (b *readBuf) byte() byte {
|
|
return b.next(1)[0]
|
|
}
|
|
|
|
type writeBuf struct {
|
|
buf []byte
|
|
pos int
|
|
}
|
|
|
|
func (b *writeBuf) int32(n int) {
|
|
x := make([]byte, 4)
|
|
binary.BigEndian.PutUint32(x, uint32(n))
|
|
b.buf = append(b.buf, x...)
|
|
}
|
|
|
|
func (b *writeBuf) int16(n int) {
|
|
x := make([]byte, 2)
|
|
binary.BigEndian.PutUint16(x, uint16(n))
|
|
b.buf = append(b.buf, x...)
|
|
}
|
|
|
|
func (b *writeBuf) string(s string) {
|
|
b.buf = append(append(b.buf, s...), '\000')
|
|
}
|
|
|
|
func (b *writeBuf) byte(c proto.RequestCode) {
|
|
b.buf = append(b.buf, byte(c))
|
|
}
|
|
|
|
func (b *writeBuf) bytes(v []byte) {
|
|
b.buf = append(b.buf, v...)
|
|
}
|
|
|
|
func (b *writeBuf) wrap() []byte {
|
|
p := b.buf[b.pos:]
|
|
if len(p) > proto.MaxUint32 {
|
|
panic(fmt.Errorf("pq: message too large (%d > math.MaxUint32)", len(p)))
|
|
}
|
|
binary.BigEndian.PutUint32(p, uint32(len(p)))
|
|
return b.buf
|
|
}
|
|
|
|
func (b *writeBuf) next(c proto.RequestCode) {
|
|
p := b.buf[b.pos:]
|
|
if len(p) > proto.MaxUint32 {
|
|
panic(fmt.Errorf("pq: message too large (%d > math.MaxUint32)", len(p)))
|
|
}
|
|
binary.BigEndian.PutUint32(p, uint32(len(p)))
|
|
b.pos = len(b.buf) + 1
|
|
b.buf = append(b.buf, byte(c), 0, 0, 0, 0)
|
|
}
|