func()

in client/session.go [89:146]


func (s *Session) Open(enableRPCCompression bool, connectionTimeoutInMs int) error {
	if s.config.FetchSize <= 0 {
		s.config.FetchSize = DefaultFetchSize
	}
	if s.config.TimeZone == "" {
		s.config.TimeZone = DefaultTimeZone
	}

	if s.config.ConnectRetryMax <= 0 {
		s.config.ConnectRetryMax = DefaultConnectRetryMax
	}

	var err error

	// in thrift 0.14.1, this func returns two values; in thrift 0.15.0, it returns one.
	s.trans = thrift.NewTSocketConf(net.JoinHostPort(s.config.Host, s.config.Port), &thrift.TConfiguration{
		ConnectTimeout: time.Duration(connectionTimeoutInMs) * time.Millisecond, // Use 0 for no timeout
	})
	// s.trans = thrift.NewTFramedTransport(s.trans)	// deprecated
	tmp_conf := thrift.TConfiguration{MaxFrameSize: thrift.DEFAULT_MAX_FRAME_SIZE}
	s.trans = thrift.NewTFramedTransportConf(s.trans, &tmp_conf)
	if !s.trans.IsOpen() {
		err = s.trans.Open()
		if err != nil {
			return err
		}
	}
	s.protocolFactory = getProtocolFactory(enableRPCCompression)
	iprot := s.protocolFactory.GetProtocol(s.trans)
	oprot := s.protocolFactory.GetProtocol(s.trans)
	s.client = rpc.NewIClientRPCServiceClient(thrift.NewTStandardClient(iprot, oprot))
	req := rpc.TSOpenSessionReq{
		ClientProtocol: rpc.TSProtocolVersion_IOTDB_SERVICE_PROTOCOL_V3, ZoneId: s.config.TimeZone, Username: s.config.UserName,
		Password: &s.config.Password,
	}
	req.Configuration = make(map[string]string)
	req.Configuration["sql_dialect"] = s.config.sqlDialect
	if s.config.Version == "" {
		req.Configuration["version"] = string(DEFAULT_VERSION)
	} else {
		req.Configuration["version"] = string(s.config.Version)
	}
	if s.config.Database != "" {
		req.Configuration["db"] = s.config.Database
	}
	resp, err := s.client.OpenSession(context.Background(), &req)
	if err != nil {
		return err
	}
	s.sessionId = resp.GetSessionId()
	s.requestStatementId, err = s.client.RequestStatementId(context.Background(), s.sessionId)
	if timeFactor, err := getTimeFactor(resp); err != nil {
		return err
	} else {
		s.timeFactor = timeFactor
	}
	return err
}