|
39 | 39 | } |
40 | 40 | ) |
41 | 41 |
|
42 | | -const maxLineBuffer = 2 * 1024 * 1024 // 2Mb |
43 | | - |
44 | 42 | // Console defines methods used for console input and output |
45 | 43 | type Console interface { |
46 | 44 | // Readline returns the next line of input. |
@@ -327,24 +325,29 @@ func (s *Sqlcmd) IncludeFile(path string, processAll bool) error { |
327 | 325 | b := s.batch.batchline |
328 | 326 | utf16bom := unicode.BOMOverride(unicode.UTF8.NewDecoder()) |
329 | 327 | unicodeReader := transform.NewReader(f, utf16bom) |
330 | | - scanner := bufio.NewScanner(unicodeReader) |
331 | | - buf := make([]byte, maxLineBuffer) |
332 | | - scanner.Buffer(buf, maxLineBuffer) |
| 328 | + scanner := bufio.NewReader(unicodeReader) |
333 | 329 | curLine := s.batch.read |
334 | 330 | echoFileLines := s.echoFileLines |
| 331 | + ln := make([]byte, 0, 2*1024*1024) |
335 | 332 | s.batch.read = func() (string, error) { |
336 | | - if !scanner.Scan() { |
337 | | - err := scanner.Err() |
338 | | - if err == nil { |
339 | | - return "", io.EOF |
340 | | - } |
341 | | - return "", err |
| 333 | + var ( |
| 334 | + isPrefix bool = true |
| 335 | + err error = nil |
| 336 | + line []byte |
| 337 | + ) |
| 338 | + |
| 339 | + for isPrefix && err == nil { |
| 340 | + line, isPrefix, err = scanner.ReadLine() |
| 341 | + ln = append(ln, line...) |
342 | 342 | } |
343 | | - t := scanner.Text() |
344 | | - if echoFileLines { |
345 | | - _, _ = s.GetOutput().Write([]byte(s.Prompt() + t + SqlcmdEol)) |
| 343 | + if err == nil && echoFileLines { |
| 344 | + _, _ = s.GetOutput().Write([]byte(s.Prompt())) |
| 345 | + _, _ = s.GetOutput().Write(ln) |
| 346 | + _, _ = s.GetOutput().Write([]byte(SqlcmdEol)) |
346 | 347 | } |
347 | | - return t, nil |
| 348 | + t := string(ln) |
| 349 | + ln = ln[:0] |
| 350 | + return t, err |
348 | 351 | } |
349 | 352 | err = s.Run(false, processAll) |
350 | 353 | s.batch.read = curLine |
|
0 commit comments