亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pgserverthread.java

?? 非常棒的java數(shù)據(jù)庫
?? JAVA
?? 第 1 頁 / 共 2 頁
字號(hào):
/*
 * Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
 * (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.server.pg;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.io.StringReader;
import java.net.Socket;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.HashMap;
import java.util.HashSet;

import org.h2.constant.SysProperties;
import org.h2.engine.ConnectionInfo;
import org.h2.jdbc.JdbcConnection;
import org.h2.util.IOUtils;
import org.h2.util.JdbcUtils;
import org.h2.util.ObjectUtils;
import org.h2.util.ScriptReader;

/**
 * One server thread is opened for each client.
 */
public class PgServerThread implements Runnable {
    private static final int TYPE_STRING = Types.VARCHAR;
    private PgServer server;
    private Socket socket;
    private Connection conn;
    private boolean stop;
    private DataInputStream dataInRaw;
    private DataInputStream dataIn;
    private OutputStream out;
    private int messageType;
    private ByteArrayOutputStream outBuffer;
    private DataOutputStream dataOut;
    private Thread thread;
    private boolean initDone;
    private String userName;
    private String databaseName;
    private int processId;
    private String clientEncoding = "UTF-8";
    private String dateStyle = "ISO";
    private HashMap prepared = new HashMap();
    private HashMap portals = new HashMap();
    private HashSet types = new HashSet();

    PgServerThread(Socket socket, PgServer server) {
        this.server = server;
        this.socket = socket;
    }

    public void run() {
        try {
            server.log("Connect");
            InputStream ins = socket.getInputStream();
            out = socket.getOutputStream();
            dataInRaw = new DataInputStream(ins);
            while (!stop) {
                process();
                out.flush();
            }
        } catch (EOFException e) {
            // more or less normal disconnect
        } catch (Exception e) {
            error("process", e);
            server.logError(e);
        } finally {
            server.log("Disconnect");
            close();
        }
    }

    private String readString() throws IOException {
        ByteArrayOutputStream buff = new ByteArrayOutputStream();
        while (true) {
            int x = dataIn.read();
            if (x <= 0) {
                break;
            }
            buff.write(x);
        }
        return new String(buff.toByteArray(), getEncoding());
    }

    private int readInt() throws IOException {
        return dataIn.readInt();
    }

    private int readShort() throws IOException {
        return dataIn.readShort();
    }

    private byte readByte() throws IOException {
        return dataIn.readByte();
    }

    private void readFully(byte[] buff) throws IOException {
        dataIn.readFully(buff);
    }

    private void error(String message, Exception e) {
        if (e != null) {
            server.logError(e);
        }
    }

    private void process() throws IOException {
        int x;
        if (initDone) {
            x = dataInRaw.read();
            if (x < 0) {
                stop = true;
                return;
            }
        } else {
            x = 0;
        }
        int len = dataInRaw.readInt();
        len -= 4;
        byte[] data = new byte[len];
        dataInRaw.readFully(data, 0, len);
        dataIn = new DataInputStream(new ByteArrayInputStream(data, 0, len));
        switch (x) {
        case 0:
            server.log("Init");
            int version = readInt();
            if (version == 80877102) {
                server.log("CancelRequest (not supported)");
                server.log(" pid: " + readInt());
                server.log(" key: " + readInt());
                error("CancelRequest", null);
            } else if (version == 80877103) {
                server.log("SSLRequest");
                out.write('N');
            } else {
                server.log("StartupMessage");
                server.log(" version " + version + " (" + (version >> 16) + "." + (version & 0xff) + ")");
                while (true) {
                    String param = readString();
                    if (param.length() == 0) {
                        break;
                    }
                    String value = readString();
                    if ("user".equals(param)) {
                        this.userName = value;
                    } else if ("database".equals(param)) {
                        this.databaseName = value;
                    } else if ("client_encoding".equals(param)) {
                        clientEncoding = value;
                    } else if ("DateStyle".equals(param)) {
                        dateStyle = value;
                    }
                    // server.log(" param " + param + "=" + value);
                }
                sendAuthenticationCleartextPassword();
                initDone = true;
            }
            break;
        case 'p': {
            server.log("PasswordMessage");
            String password = readString();
            try {
                ConnectionInfo ci = new ConnectionInfo(databaseName);
                String baseDir = server.getBaseDir();
                if (baseDir == null) {
                    baseDir = SysProperties.getBaseDir();
                }
                if (baseDir != null) {
                    ci.setBaseDir(baseDir);
                }
                if (server.getIfExists()) {
                    ci.setProperty("IFEXISTS", "TRUE");
                }
                ci.setProperty("MODE", "PostgreSQL");
                ci.setOriginalURL("jdbc:h2:" + databaseName + ";MODE=PostgreSQL");
                ci.setUserName(userName);
                ci.setProperty("PASSWORD", password);
                ci.readPasswords();
                conn = new JdbcConnection(ci, false);
                // can not do this because when called inside
                // DriverManager.getConnection, a deadlock occurs
                // conn = DriverManager.getConnection(url, userName, password);
                initDb();
                sendAuthenticationOk();
            } catch (SQLException e) {
                e.printStackTrace();
                stop = true;
            }
            break;
        }
        case 'P': {
            server.log("Parse");
            Prepared p = new Prepared();
            p.name = readString();
            p.sql = getSQL(readString());
            int count = readShort();
            p.paramType = new int[count];
            for (int i = 0; i < count; i++) {
                int type = readInt();
                checkType(type);
                p.paramType[i] = type;
            }
            try {
                p.prep = conn.prepareStatement(p.sql);
                prepared.put(p.name, p);
                sendParseComplete();
            } catch (SQLException e) {
                sendErrorResponse(e);
            }
            break;
        }
        case 'B': {
            server.log("Bind");
            Portal portal = new Portal();
            portal.name = readString();
            String prepName = readString();
            Prepared prep = (Prepared) prepared.get(prepName);
            if (prep == null) {
                sendErrorResponse("Portal not found");
                break;
            }
            portal.sql = prep.sql;
            portal.prep = prep.prep;
            portals.put(portal.name, portal);
            int formatCodeCount = readShort();
            int[] formatCodes = new int[formatCodeCount];
            for (int i = 0; i < formatCodeCount; i++) {
                formatCodes[i] = readShort();
            }
            int paramCount = readShort();
            for (int i = 0; i < paramCount; i++) {
                int paramLen = readInt();
                byte[] d2 = new byte[paramLen];
                readFully(d2);
                try {
                    setParameter(portal.prep, i, d2, formatCodes);
                } catch (SQLException e) {
                    sendErrorResponse(e);
                }
            }
            int resultCodeCount = readShort();
            portal.resultColumnFormat = new int[resultCodeCount];
            for (int i = 0; i < resultCodeCount; i++) {
                portal.resultColumnFormat[i] = readShort();
            }
            sendBindComplete();
            break;
        }
        case 'D': {
            char type = (char) readByte();
            String name = readString();
            server.log("Describe");
            PreparedStatement prep;
            if (type == 'S') {
                Prepared p = (Prepared) prepared.get(name);
                if (p == null) {
                    sendErrorResponse("Prepared not found: " + name);
                }
                prep = p.prep;
                sendParameterDescription(p);
            } else if (type == 'P') {
                Portal p = (Portal) portals.get(name);
                if (p == null) {
                    sendErrorResponse("Portal not found: " + name);
                }
                prep = p.prep;
                try {
                    ResultSetMetaData meta = prep.getMetaData();
                    sendRowDescription(meta);
                } catch (SQLException e) {
                    sendErrorResponse(e);
                }
            } else {
                error("expected S or P, got " + type, null);
                sendErrorResponse("expected S or P");
            }
            break;
        }
        case 'E': {
            String name = readString();
            server.log("Execute");
            Portal p = (Portal) portals.get(name);
            if (p == null) {
                sendErrorResponse("Portal not found: " + name);
                break;
            }
            int maxRows = readShort();
            PreparedStatement prep = p.prep;
            server.log(p.sql);
            try {
                prep.setMaxRows(maxRows);
                boolean result = prep.execute();
                if (result) {
                    try {
                        ResultSet rs = prep.getResultSet();
                        ResultSetMetaData meta = rs.getMetaData();
                        sendRowDescription(meta);
                        while (rs.next()) {
                            sendDataRow(p.resultColumnFormat, rs);
                        }
                        sendCommandComplete(p.sql, 0);
                    } catch (SQLException e) {
                        sendErrorResponse(e);
                    }
                } else {
                    sendCommandComplete(p.sql, prep.getUpdateCount());
                }
            } catch (SQLException e) {
                sendErrorResponse(e);
            }
            break;
        }
        case 'S': {
            server.log("Sync");
            sendReadyForQuery();
            break;
        }
        case 'Q': {
            server.log("Query");
            String query = readString();
            ScriptReader reader = new ScriptReader(new StringReader(query));
            while (true) {
                Statement stat = null;
                try {
                    String s = reader.readStatement();
                    if (s == null) {
                        break;
                    }
                    s = getSQL(s);
                    stat = conn.createStatement();
                    boolean result = stat.execute(s);
                    if (result) {
                        ResultSet rs = stat.getResultSet();
                        ResultSetMetaData meta = rs.getMetaData();
                        sendRowDescription(meta);
                        while (rs.next()) {
                            sendDataRow(null, rs);
                        }
                        sendCommandComplete(s, 0);
                    } else {
                        sendCommandComplete(s, stat.getUpdateCount());
                    }
                } catch (SQLException e) {
                    sendErrorResponse(e);
                } finally {
                    JdbcUtils.closeSilently(stat);
                }
            }
            sendReadyForQuery();
            break;
        }
        case 'X': {
            server.log("Terminate");
            close();
            break;
        }
        default:
            error("Unsupported: " + x + " (" + (char) x + ")", null);
            break;
        }
    }

    private void checkType(int type) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲影视婷婷| 亚洲视频每日更新| 成人动漫视频在线| 午夜精品一区在线观看| 国产午夜精品久久| 欧美日韩高清在线播放| 风间由美中文字幕在线看视频国产欧美| 亚洲伦在线观看| 久久综合精品国产一区二区三区| 91搞黄在线观看| 国产成人精品亚洲日本在线桃色| 五月综合激情婷婷六月色窝| 亚洲欧洲日韩在线| 久久综合九色综合97_久久久| 欧美mv日韩mv国产网站| 99久久久久久| 黄色小说综合网站| 图片区小说区区亚洲影院| 国产精品成人免费在线| 欧美精品一区二区三区久久久| 在线观看亚洲专区| 99久久亚洲一区二区三区青草| 国模少妇一区二区三区| 日日夜夜精品视频免费| 一区二区在线电影| 国产精品久久久久aaaa| 精品国产乱码久久久久久1区2区| 欧美日韩精品福利| 欧美最猛黑人xxxxx猛交| 99视频精品全部免费在线| 国产美女一区二区三区| 久久av中文字幕片| 视频一区二区三区入口| 亚洲高清久久久| 亚洲伦理在线精品| 亚洲人被黑人高潮完整版| 国产精品色婷婷| 国产欧美1区2区3区| 日韩欧美三级在线| 欧美一区二区成人| 制服视频三区第一页精品| 欧美色图片你懂的| 欧美午夜理伦三级在线观看| 日本大香伊一区二区三区| 一本到一区二区三区| 91原创在线视频| 91麻豆免费视频| 色吊一区二区三区| 欧美艳星brazzers| 欧美三级视频在线观看| 欧美狂野另类xxxxoooo| 欧美二区三区91| 日韩欧美亚洲国产另类| 精品久久久久一区二区国产| 久久一区二区视频| 国产精品视频在线看| 亚洲同性同志一二三专区| 亚洲欧美激情一区二区| 一区二区三区蜜桃| 日韩成人一级片| 狠狠色丁香婷综合久久| 国产不卡在线播放| 91麻豆国产福利精品| 欧美三级在线视频| 日韩免费观看高清完整版在线观看| 精品久久久久av影院 | 91亚洲资源网| 一本久久综合亚洲鲁鲁五月天 | 717成人午夜免费福利电影| 欧美一区二区三区免费观看视频| 精品国产乱码久久久久久老虎| 国产欧美精品一区| 亚洲人xxxx| 蜜桃久久久久久| 成人免费的视频| 欧美日韩色综合| 精品国产一区二区三区久久久蜜月| 国产日韩欧美激情| 亚洲一区成人在线| 精品一区免费av| 91小宝寻花一区二区三区| 欧美精品日日鲁夜夜添| 久久久亚洲午夜电影| 亚洲夂夂婷婷色拍ww47| 精彩视频一区二区| 色琪琪一区二区三区亚洲区| 精品日韩一区二区| 亚洲免费视频中文字幕| 免费成人结看片| 91在线一区二区| 精品奇米国产一区二区三区| 亚洲精品日产精品乱码不卡| 久久99久久99| 欧美中文字幕一区二区三区亚洲| 久久亚洲精精品中文字幕早川悠里 | 欧美日韩国产三级| 国产午夜亚洲精品不卡| 亚洲韩国精品一区| 成人精品免费网站| 欧美成人一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 九九国产精品视频| 欧美影视一区二区三区| 欧美激情在线看| 精品一区二区三区的国产在线播放| 一本一道波多野结衣一区二区| 久久久影视传媒| 人妖欧美一区二区| 欧美国产一区视频在线观看| 五月婷婷综合激情| 99久久精品免费看| 国产亚洲一区二区三区在线观看| 午夜视黄欧洲亚洲| 色老汉一区二区三区| 国产亲近乱来精品视频 | 国产麻豆视频精品| 欧美日韩大陆在线| 亚洲裸体在线观看| a美女胸又www黄视频久久| 2欧美一区二区三区在线观看视频| 天涯成人国产亚洲精品一区av| 99re66热这里只有精品3直播| 久久久久久久av麻豆果冻| 琪琪久久久久日韩精品| 欧美视频一二三区| 一区二区久久久久久| 99在线精品免费| 国产精品视频线看| 国产乱子轮精品视频| 精品日韩成人av| 精品一区二区免费看| 欧美一级日韩免费不卡| 午夜视频在线观看一区二区| 欧美亚洲动漫精品| 亚洲一区二区三区四区在线免费观看| 99re亚洲国产精品| 18成人在线视频| 91丨porny丨中文| 亚洲视频小说图片| 91麻豆国产自产在线观看| 亚洲欧美日韩国产手机在线| 色综合视频在线观看| 亚洲精品网站在线观看| 91黄色免费观看| 亚洲成人高清在线| 欧美人动与zoxxxx乱| 午夜视频在线观看一区二区| 7777精品伊人久久久大香线蕉的 | 免费成人av资源网| 日韩西西人体444www| 久久99精品国产.久久久久久 | 亚洲一区二区三区在线播放| 在线亚洲精品福利网址导航| 亚洲一区二区三区小说| 在线成人小视频| 久久精品国产色蜜蜜麻豆| 精品av久久707| 成人天堂资源www在线| 国产精品国产三级国产普通话99| 91网站黄www| 亚洲国产精品综合小说图片区| 欧美精品三级日韩久久| 寂寞少妇一区二区三区| 国产欧美一区二区三区鸳鸯浴| 91首页免费视频| 五月激情六月综合| 亚洲精品一区二区精华| 不卡在线观看av| 五月婷婷另类国产| 久久综合色婷婷| 色妞www精品视频| 日韩国产欧美在线播放| 精品国产91亚洲一区二区三区婷婷| 丰满岳乱妇一区二区三区| 亚洲色图欧洲色图| 欧美一区二区三区视频免费播放| 国产精品99久| 一区二区三区欧美激情| 欧美一卡2卡三卡4卡5免费| 国产精品1024久久| 亚洲综合偷拍欧美一区色| 日韩午夜电影av| 99久久99久久免费精品蜜臀| 日韩中文字幕区一区有砖一区| 国产性色一区二区| 欧美日韩中文字幕一区二区| 国产精品99久久久久| 亚洲一线二线三线视频| 久久众筹精品私拍模特| 91电影在线观看| 国产精品一区二区x88av| 亚洲电影在线播放| 国产午夜久久久久| 8x8x8国产精品| 91丨九色丨国产丨porny| 麻豆91在线观看| 亚洲国产精品视频| 亚洲国产精品v| 欧美精品一区二区不卡 | 欧美精品乱码久久久久久|