/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.sqoop.manager.sqlserver; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.util.StringUtils; import org.apache.sqoop.manager.sqlserver.MSSQLTestData.KEY_STRINGS; /** * Class to parse sql server data types */ public class MSSQLTestDataFileParser { public static final Log LOG = LogFactory.getLog( MSSQLTestDataFileParser.class.getName()); private String filename; private String delim; private List records; MSSQLTestDataFileParser(String filename) throws Exception { this.filename = filename; } enum DATATYPES { DECIMAL, NUMERIC, VARBINARY, TIME, SMALLDATETIME, DATETIME, DATETIME2, DATETIMEOFFSET, BIGINT, INT, MONEY, SMALLMONEY, TEXT, NTEXT, NCHAR, NVARCHAR, IMAGE, SMALLINT, FLOAT, REAL, DATE, CHAR, VARCHAR, BINARY, TINYINT; } public void parse() throws Exception { if (this.filename == null) { throw new Exception("No test data file specified."); } BufferedReader br = new BufferedReader(new FileReader(this.filename)); if (br != null) { records = new ArrayList(); String tmp; String del = this.getDelim(); int offset = 0; while ((tmp = br.readLine()) != null) { offset++; String[] splits = tmp.split(del); if (splits.length == 5 || splits.length == 6 || splits.length == 7) { System.out.println(Integer.toString(offset)); MSSQLTestData td = new MSSQLTestData(splits[0]); td.setData(KEY_STRINGS.OFFSET, Integer.toString(offset)); if (splits[0].equals(DATATYPES.DECIMAL.toString()) || splits[0].equals(DATATYPES.NUMERIC.toString())) { td.setData(KEY_STRINGS.TO_INSERT, splits[1]); td.setData(KEY_STRINGS.DB_READBACK, splits[2]); td.setData(KEY_STRINGS.HDFS_READBACK, splits[3]); td.setData(KEY_STRINGS.SCALE, splits[4]); td.setData(KEY_STRINGS.PREC, splits[5]); td.setData(KEY_STRINGS.NEG_POS_FLAG, splits[6]); records.add(td); } else if (splits[0].equals(DATATYPES.NCHAR.toString()) || splits[0].equals(DATATYPES.VARBINARY.toString()) || splits[0].equals(DATATYPES.NVARCHAR.toString()) || splits[0].equals(DATATYPES.CHAR.toString()) || splits[0].equals(DATATYPES.VARCHAR.toString()) || splits[0].equals(DATATYPES.BINARY.toString())) { td.setData(KEY_STRINGS.TO_INSERT, splits[1]); td.setData(KEY_STRINGS.DB_READBACK, splits[2]); td.setData(KEY_STRINGS.HDFS_READBACK, splits[3]); td.setData(KEY_STRINGS.SCALE, splits[4]); td.setData(KEY_STRINGS.NEG_POS_FLAG, splits[5]); records.add(td); } else { td.setData(KEY_STRINGS.TO_INSERT, splits[1]); td.setData(KEY_STRINGS.DB_READBACK, splits[2]); td.setData(KEY_STRINGS.HDFS_READBACK, splits[3]); td.setData(KEY_STRINGS.NEG_POS_FLAG, splits[4]); records.add(td); } } } System.out.println("\n\n Records" + records.size() + "\n\n"); } } public List getRecords() { return records; } public List getTestdata(DATATYPES dt) { List l; l = new ArrayList(); if (records != null) { for (Iterator<MSSQLTestData> i = records.iterator(); i.hasNext();) { MSSQLTestData tmp = i.next(); if (tmp.getDatatype().equals(dt.toString())) { l.add(tmp); } } } return l; } private void trim(String[] strings) { for (int i = 0; i < strings.length; i++) { strings[i] = strings[i].trim(); } } public String getDelim() { return delim; } public void setDelim(String delim1) { this.delim = delim1; } }