1 /*
2  * Copyright 2009-2017 Alibaba Cloud All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 #include <alibabacloud/oss/OssRequest.h>
19 #include <alibabacloud/oss/model/GetObjectRequest.h>
20 #include <alibabacloud/oss/Types.h>
21 #include <alibabacloud/oss/model/InputFormat.h>
22 #include <alibabacloud/oss/model/OutputFormat.h>
23 #include <alibabacloud/oss/model/CreateSelectObjectMetaRequest.h>
24 
25 namespace AlibabaCloud
26 {
27 namespace OSS
28 {
29 	enum ExpressionType
30 	{
31 		SQL,
32 	};
33     class OssClientImpl;
34 	class ALIBABACLOUD_OSS_EXPORT SelectObjectRequest : public GetObjectRequest
35 	{
36 	public:
37 		SelectObjectRequest(const std::string& bucket, const std::string& key);
38 
39 		void setExpression(const std::string& expression, ExpressionType type = SQL);
40         void setSkippedRecords(bool skipPartialDataRecord, uint64_t maxSkippedRecords);
41         void setInputFormat(InputFormat& inputFormat);
42         void setOutputFormat(OutputFormat& OutputFormat);
43 
44         uint64_t MaxSkippedRecordsAllowed() const;
45         void setResponseStreamFactory(const IOStreamFactory& factory);
46 
47 	protected:
48         friend class OssClientImpl;
49 		virtual std::string payload() const;
50 		virtual int validate() const;
51         virtual ParameterCollection specialParameters() const;
52         int dispose() const;
53 	private:
54 		ExpressionType expressionType_;
55 		std::string expression_;
56 		bool skipPartialDataRecord_;
57 		uint64_t maxSkippedRecordsAllowed_;
58 		InputFormat *inputFormat_;
59 		OutputFormat *outputFormat_;
60 
61         mutable std::shared_ptr<std::streambuf> streamBuffer_;
62         mutable std::shared_ptr<std::iostream> upperContent_;
63         IOStreamFactory upperResponseStreamFactory_;
64 	};
65 
66 }
67 }