add sql support
This commit is contained in:
		
							parent
							
								
									cacf168a5b
								
							
						
					
					
						commit
						99f10c8fa9
					
				
							
								
								
									
										195
									
								
								starainrt.go
									
									
									
									
									
								
							
							
						
						
									
										195
									
								
								starainrt.go
									
									
									
									
									
								
							@ -2,23 +2,35 @@ package starainrt
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"crypto/md5"
 | 
			
		||||
	"crypto/rc4"
 | 
			
		||||
	"crypto/sha1"
 | 
			
		||||
	"crypto/sha256"
 | 
			
		||||
	"crypto/sha512"
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"encoding/base64"
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"hash/crc32"
 | 
			
		||||
	"io"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"net"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"os"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
	
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var HttpNul, HttpNul2 map[string]string
 | 
			
		||||
var HttpTimeOut int64 = 15
 | 
			
		||||
var DBRes *sql.DB
 | 
			
		||||
var DBRows *sql.Rows
 | 
			
		||||
 | 
			
		||||
func Exists(filepath string) bool {
 | 
			
		||||
	_, err := os.Stat(filepath)
 | 
			
		||||
	if err != nil && os.IsNotExist(err) {
 | 
			
		||||
@ -669,3 +681,186 @@ func AttachFile(source, target, output string) (bool, string) {
 | 
			
		||||
	fp.Close()
 | 
			
		||||
	return true, strconv.FormatInt(filesize, 10)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func CurlGet(url string) (error, string) {
 | 
			
		||||
	err, _, res, _, _ := Curl(url, "", HttpNul, HttpNul2, "GET")
 | 
			
		||||
	return err, res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func CurlPost(url, postdata string) (error, string) {
 | 
			
		||||
	err, _, res, _, _ := Curl(url, postdata, HttpNul, HttpNul2, "POST")
 | 
			
		||||
	return err, res
 | 
			
		||||
}
 | 
			
		||||
func HttpNulReset() {
 | 
			
		||||
	var tmp map[string]string
 | 
			
		||||
	HttpNul, HttpNul2 = tmp, tmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Curl(url string, postdata string, header map[string]string, cookie map[string]string, method string) (error, int, string, http.Header, []*http.Cookie) {
 | 
			
		||||
	var req *http.Request
 | 
			
		||||
	if method == "" {
 | 
			
		||||
		if len(postdata) != 0 {
 | 
			
		||||
			method = "POST"
 | 
			
		||||
		} else {
 | 
			
		||||
			method = "GET"
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	BytePostData := []byte(postdata)
 | 
			
		||||
	if postdata == "" || len(postdata) == 0 {
 | 
			
		||||
		req, _ = http.NewRequest(method, url, nil)
 | 
			
		||||
	} else {
 | 
			
		||||
		req, _ = http.NewRequest(method, url, bytes.NewBuffer(BytePostData))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (len(header) == 0 || header == nil) && method == "POST" {
 | 
			
		||||
		req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
 | 
			
		||||
	}
 | 
			
		||||
	for k, v := range header {
 | 
			
		||||
		req.Header.Set(k, v)
 | 
			
		||||
	}
 | 
			
		||||
	if len(cookie) != 0 {
 | 
			
		||||
		for k, v := range cookie {
 | 
			
		||||
			cookie1 := &http.Cookie{Name: k, Value: v, HttpOnly: true}
 | 
			
		||||
			req.AddCookie(cookie1)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	client := &http.Client{
 | 
			
		||||
		Transport: &http.Transport{
 | 
			
		||||
			Dial: func(netw, addr string) (net.Conn, error) {
 | 
			
		||||
				deadline := time.Now().Add(time.Duration(HttpTimeOut) * time.Second)
 | 
			
		||||
				c, err := net.DialTimeout(netw, addr, time.Second*time.Duration(HttpTimeOut))
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					return nil, err
 | 
			
		||||
				}
 | 
			
		||||
				c.SetDeadline(deadline)
 | 
			
		||||
				return c, nil
 | 
			
		||||
			},
 | 
			
		||||
		}}
 | 
			
		||||
	resp, err := client.Do(req)
 | 
			
		||||
	var rte []*http.Cookie
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err, 0, "", req.Header, rte
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
 | 
			
		||||
	statuscode := resp.StatusCode
 | 
			
		||||
	hea := resp.Header
 | 
			
		||||
	body, _ := ioutil.ReadAll(resp.Body)
 | 
			
		||||
	return nil, statuscode, string(body), hea, resp.Cookies()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func FetchAll(rows *sql.Rows)(error,map[int]map[string]string){
 | 
			
		||||
	var ii int=0
 | 
			
		||||
	records := make(map[int]map[string]string)
 | 
			
		||||
	columns, err:= rows.Columns()
 | 
			
		||||
	if err!=nil {
 | 
			
		||||
		return err,records
 | 
			
		||||
	}
 | 
			
		||||
	scanArgs := make([]interface{}, len(columns))
 | 
			
		||||
	values := make([]interface{}, len(columns))
 | 
			
		||||
	for i := range values {
 | 
			
		||||
    	scanArgs[i] = &values[i]
 | 
			
		||||
	}
 | 
			
		||||
	for rows.Next() {
 | 
			
		||||
    	if err := rows.Scan(scanArgs...);err!=nil{
 | 
			
		||||
			return err,records
 | 
			
		||||
		}
 | 
			
		||||
		record := make(map[string]string)
 | 
			
		||||
    	for i, col := range values {
 | 
			
		||||
			switch vtype:=col.(type){
 | 
			
		||||
			case int64:
 | 
			
		||||
				record[columns[i]] = strconv.FormatInt(vtype,10)
 | 
			
		||||
			default:
 | 
			
		||||
				record[columns[i]] = string(vtype.([]byte))
 | 
			
		||||
			}
 | 
			
		||||
    	}
 | 
			
		||||
		records[ii]=record
 | 
			
		||||
		ii++
 | 
			
		||||
	}
 | 
			
		||||
	return  nil,records
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func OpenDB(Method,ConnStr string)error{
 | 
			
		||||
	var err error
 | 
			
		||||
	DBRes,err=sql.Open(Method,ConnStr)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
func CloseDB(){
 | 
			
		||||
	DBRes.Close()
 | 
			
		||||
	DBRows.Close()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Query(args ...interface{})(error,map[int]map[string]string){
 | 
			
		||||
	var err error
 | 
			
		||||
	records := make(map[int]map[string]string)
 | 
			
		||||
	if err=DBRes.Ping();err!=nil{
 | 
			
		||||
		return err,records
 | 
			
		||||
	}
 | 
			
		||||
	if len(args)==0 {
 | 
			
		||||
		return errors.New("no args"),records
 | 
			
		||||
	}
 | 
			
		||||
	if(len(args)==1){
 | 
			
		||||
		sql:=args[0]
 | 
			
		||||
		if DBRows,err=DBRes.Query(sql.(string));err!=nil{
 | 
			
		||||
			return err,records
 | 
			
		||||
		}
 | 
			
		||||
		return FetchAll(DBRows)
 | 
			
		||||
	}
 | 
			
		||||
	sql:=args[0]
 | 
			
		||||
	stmt,err:=DBRes.Prepare(sql.(string))
 | 
			
		||||
	if err!=nil{
 | 
			
		||||
		return err,records
 | 
			
		||||
	}
 | 
			
		||||
	var para []interface{}
 | 
			
		||||
	for k,v:=range args{
 | 
			
		||||
		if k!=0{
 | 
			
		||||
			switch vtype:=v.(type){
 | 
			
		||||
			default:
 | 
			
		||||
				para=append(para,vtype)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if DBRows,err=stmt.Query(para...);err!=nil{
 | 
			
		||||
		return err,records
 | 
			
		||||
	}
 | 
			
		||||
	return FetchAll(DBRows)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DBExec(args ...interface{})(error){
 | 
			
		||||
	var err error
 | 
			
		||||
	if err=DBRes.Ping();err!=nil{
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if len(args)==0 {
 | 
			
		||||
		return errors.New("no args")
 | 
			
		||||
	}
 | 
			
		||||
	if(len(args)==1){
 | 
			
		||||
		sql:=args[0]
 | 
			
		||||
		if _,err=DBRes.Exec(sql.(string));err!=nil{
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	sql:=args[0]
 | 
			
		||||
	stmt,err:=DBRes.Prepare(sql.(string))
 | 
			
		||||
	if err!=nil{
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	var para []interface{}
 | 
			
		||||
	for k,v:=range args{
 | 
			
		||||
		if k!=0{
 | 
			
		||||
			switch vtype:=v.(type){
 | 
			
		||||
			default:
 | 
			
		||||
				para=append(para,vtype)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if _,err=stmt.Exec(para...);err!=nil{
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user