rroonga 7.0.2 → 7.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,7 +54,7 @@ grn_obj *
54
54
  rb_grn_column_from_ruby_object (VALUE object, grn_ctx **context)
55
55
  {
56
56
  if (!RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnColumn))) {
57
- rb_raise(rb_eTypeError, "not a groonga column");
57
+ rb_raise(rb_eTypeError, "not a Groonga column");
58
58
  }
59
59
 
60
60
  return RVAL2GRNOBJECT(object, context);
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2010-2015 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2010-2018 Kouhei Sutou <kou@clear-code.com>
4
4
  Copyright (C) 2016 Masafumi Yokoyama <yokoyama@clear-code.com>
5
5
 
6
6
  This library is free software; you can redistribute it and/or
@@ -700,10 +700,10 @@ rb_grn_context_support_lz4_p (VALUE self)
700
700
  }
701
701
 
702
702
  /*
703
- * If Groonga supports Zstandard compression, it returns `true`,
704
- * otherwise it returns `false`.
705
- *
706
703
  * @overload support_zstd?
704
+ *
705
+ * @return [Boolean] `true` if Groonga supports Zstandard compression,
706
+ * `false` otherwise.
707
707
  */
708
708
  static VALUE
709
709
  rb_grn_context_support_zstd_p (VALUE self)
@@ -721,6 +721,28 @@ rb_grn_context_support_zstd_p (VALUE self)
721
721
  return rb_support_p;
722
722
  }
723
723
 
724
+ /*
725
+ * @overload support_arrow?
726
+ *
727
+ * @return [Boolean] `true` if Groonga supports Apache Arrow,
728
+ * `false` otherwise.
729
+ */
730
+ static VALUE
731
+ rb_grn_context_support_arrow_p (VALUE self)
732
+ {
733
+ VALUE rb_support_p;
734
+ grn_ctx *context;
735
+ grn_obj support_p;
736
+
737
+ context = SELF(self);
738
+ GRN_BOOL_INIT(&support_p, 0);
739
+ grn_obj_get_info(context, NULL, GRN_INFO_SUPPORT_ARROW, &support_p);
740
+ rb_support_p = CBOOL2RVAL(GRN_BOOL_VALUE(&support_p));
741
+ GRN_OBJ_FIN(context, &support_p);
742
+
743
+ return rb_support_p;
744
+ }
745
+
724
746
  /*
725
747
  * コンテキストが使うデータベースを返す。
726
748
  *
@@ -1030,6 +1052,8 @@ rb_grn_init_context (VALUE mGrn)
1030
1052
  rb_grn_context_support_lz4_p, 0);
1031
1053
  rb_define_method(cGrnContext, "support_zstd?",
1032
1054
  rb_grn_context_support_zstd_p, 0);
1055
+ rb_define_method(cGrnContext, "support_arrow?",
1056
+ rb_grn_context_support_arrow_p, 0);
1033
1057
 
1034
1058
  rb_define_method(cGrnContext, "database", rb_grn_context_get_database, 0);
1035
1059
 
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2009-2015 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2009-2018 Kouhei Sutou <kou@clear-code.com>
4
4
  Copyright (C) 2014 Masafumi Yokoyama <myokoym@gmail.com>
5
5
 
6
6
  This library is free software; you can redistribute it and/or
@@ -424,6 +424,18 @@ rb_grn_expression_append_operation (VALUE self, VALUE rb_operation,
424
424
  * デフォルトでは更新操作を利用できる。
425
425
  *
426
426
  * 参考: "Groongaのクエリ構文のドキュメント":http://groonga.org/ja/docs/reference/grn_expr/query_syntax.html
427
+ * @option options :no_syntax_error
428
+ * Specifies whether preventing syntax error in query syntax.
429
+ *
430
+ * If it's `true`, special characters are treated as normal
431
+ * characters on syntax error.
432
+ *
433
+ * If it's `false`, syntax error is reported on syntax error.
434
+ * It's the default.
435
+ *
436
+ * You can't use this option in script syntax.
437
+ *
438
+ * @see [Query syntax document in Groonga](http://groonga.org/docs/reference/grn_expr/query_syntax.html)
427
439
  */
428
440
  static VALUE
429
441
  rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
@@ -440,6 +452,7 @@ rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
440
452
  VALUE options, rb_query, rb_default_column, rb_default_operator;
441
453
  VALUE rb_default_mode, rb_syntax;
442
454
  VALUE rb_allow_pragma, rb_allow_column, rb_allow_update, rb_allow_leading_not;
455
+ VALUE rb_no_syntax_error;
443
456
  VALUE exception = Qnil;
444
457
 
445
458
  rb_scan_args(argc, argv, "11", &rb_query, &options);
@@ -452,6 +465,7 @@ rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
452
465
  "allow_column", &rb_allow_column,
453
466
  "allow_update", &rb_allow_update,
454
467
  "allow_leading_not", &rb_allow_leading_not,
468
+ "no_syntax_error", &rb_no_syntax_error,
455
469
  NULL);
456
470
 
457
471
  query = StringValuePtr(rb_query);
@@ -521,6 +535,14 @@ rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
521
535
  flags |= GRN_EXPR_ALLOW_LEADING_NOT;
522
536
  }
523
537
 
538
+ if (!NIL_P(rb_no_syntax_error)) {
539
+ if ((flags & GRN_EXPR_SYNTAX_SCRIPT))
540
+ rb_raise(rb_eArgError,
541
+ ":no_syntax_error isn't allowed in script syntax");
542
+ if (RVAL2CBOOL(rb_no_syntax_error))
543
+ flags |= GRN_EXPR_QUERY_NO_SYNTAX_ERROR;
544
+ }
545
+
524
546
  rc = grn_expr_parse(context, expression, query, query_size,
525
547
  default_column, default_mode, default_operator,
526
548
  flags);
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2009-2016 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2009-2018 Kouhei Sutou <kou@clear-code.com>
4
4
  Copyright (C) 2014-2016 Masafumi Yokoyama <yokoyama@clear-code.com>
5
5
 
6
6
  This library is free software; you can redistribute it and/or
@@ -1970,6 +1970,44 @@ rb_grn_object_dirty_p (VALUE self)
1970
1970
  return CBOOL2RVAL(is_dirty);
1971
1971
  }
1972
1972
 
1973
+ /*
1974
+ * @overload corrupt?
1975
+ * @return [Boolean] `true` if the object is corrupt, `false` otherwise.
1976
+ *
1977
+ * @since 7.1.1
1978
+ */
1979
+ static VALUE
1980
+ rb_grn_object_corrupt_p (VALUE self)
1981
+ {
1982
+ grn_ctx *context;
1983
+ grn_obj *object;
1984
+ grn_bool is_corrupt;
1985
+
1986
+ rb_grn_object_deconstruct(SELF(self), &object, &context,
1987
+ NULL, NULL, NULL, NULL);
1988
+ is_corrupt = grn_obj_is_corrupt(context, object);
1989
+ return CBOOL2RVAL(is_corrupt);
1990
+ }
1991
+
1992
+ /*
1993
+ * @overload disk_usage
1994
+ * @return [Integer] The number of bytes used by this object in disk.
1995
+ *
1996
+ * @since 7.1.1
1997
+ */
1998
+ static VALUE
1999
+ rb_grn_object_get_disk_usage (VALUE self)
2000
+ {
2001
+ grn_ctx *context;
2002
+ grn_obj *object;
2003
+ size_t disk_usage;
2004
+
2005
+ rb_grn_object_deconstruct(SELF(self), &object, &context,
2006
+ NULL, NULL, NULL, NULL);
2007
+ disk_usage = grn_obj_get_disk_usage(context, object);
2008
+ return UINT2NUM(disk_usage);
2009
+ }
2010
+
1973
2011
  void
1974
2012
  rb_grn_init_object (VALUE mGrn)
1975
2013
  {
@@ -2032,4 +2070,9 @@ rb_grn_init_object (VALUE mGrn)
2032
2070
  rb_grn_object_get_last_modified, 0);
2033
2071
  rb_define_method(rb_cGrnObject, "dirty?",
2034
2072
  rb_grn_object_dirty_p, 0);
2073
+ rb_define_method(rb_cGrnObject, "corrupt?",
2074
+ rb_grn_object_corrupt_p, 0);
2075
+
2076
+ rb_define_method(rb_cGrnObject, "disk_usage",
2077
+ rb_grn_object_get_disk_usage, 0);
2035
2078
  }
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2009-2014 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2009-2018 Kouhei Sutou <kou@clear-code.com>
4
4
 
5
5
  This library is free software; you can redistribute it and/or
6
6
  modify it under the terms of the GNU Lesser General Public
@@ -50,6 +50,19 @@ rb_grn_procedure_get_type (VALUE self)
50
50
  return INT2NUM(type);
51
51
  }
52
52
 
53
+ static VALUE
54
+ rb_grn_procedure_stable_p (VALUE self)
55
+ {
56
+ grn_ctx *context;
57
+ grn_obj *procedure;
58
+ grn_bool is_stable;
59
+
60
+ procedure = RVAL2GRNOBJECT(self, &context);
61
+ is_stable = grn_proc_is_stable(context, procedure);
62
+
63
+ return CBOOL2RVAL(is_stable);
64
+ }
65
+
53
66
  void
54
67
  rb_grn_init_procedure (VALUE mGrn)
55
68
  {
@@ -62,4 +75,6 @@ rb_grn_init_procedure (VALUE mGrn)
62
75
  rb_define_const(rb_cGrnProcedure, "MECAB", INT2NUM(GRN_DB_MECAB));
63
76
 
64
77
  rb_define_method(rb_cGrnProcedure, "type", rb_grn_procedure_get_type, 0);
78
+
79
+ rb_define_method(rb_cGrnProcedure, "stable?", rb_grn_procedure_stable_p, 0);
65
80
  }
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2012-2015 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2012-2018 Kouhei Sutou <kou@clear-code.com>
4
4
 
5
5
  This library is free software; you can redistribute it and/or
6
6
  modify it under the terms of the GNU Lesser General Public
@@ -390,10 +390,11 @@ rb_grn_query_logger_s_get_rotate_threshold_size (VALUE klass)
390
390
  * Groonga::QueryLogger.rotate_threshold_size = 0
391
391
  *
392
392
  * @overload rotate_threshold_size=(size)
393
- * @param size [Integer] The log path for the default query logger.
394
- * If nil is specified, log rotate by the default query logger is
395
- * disabled.
396
- * @return void
393
+ * @param size [Integer] The rotate threshold size for the default
394
+ * query logger. If `nil` is specified, log rotate by the default
395
+ * query logger is disabled.
396
+ *
397
+ * @return `size` itself.
397
398
  *
398
399
  * @since 5.0.2
399
400
  */
@@ -402,7 +403,49 @@ rb_grn_query_logger_s_set_rotate_threshold_size (VALUE klass, VALUE rb_size)
402
403
  {
403
404
  grn_default_query_logger_set_rotate_threshold_size(NUM2OFFT(rb_size));
404
405
 
405
- return Qnil;
406
+ return rb_size;
407
+ }
408
+
409
+ /*
410
+ * Gets the current flags that are used by the default query logger.
411
+ *
412
+ * @overload flags
413
+ * @return [Integer] The current flags
414
+ *
415
+ * @since 7.1.1
416
+ */
417
+ static VALUE
418
+ rb_grn_query_logger_s_get_flags (VALUE klass)
419
+ {
420
+ return UINT2NUM(grn_default_query_logger_get_flags());
421
+ }
422
+
423
+ /*
424
+ * Sets the flags that are used by the default query logger. If you're
425
+ * using custom query logger by {.register}, the flags aren't
426
+ * used. Because it is for the default query logger.
427
+ *
428
+ * @example Changes the rotate threshold size for the default query logger
429
+ * Groonga::QueryLogger.rotate_threshold_size = 1 * 1024 * 1024 # 1MiB
430
+ *
431
+ * @example Disables log ration by the default query logger
432
+ * Groonga::QueryLogger.rotate_threshold_size = 0
433
+ *
434
+ * @overload flags=(flags)
435
+ * @param flags [Integer] The flags for the default query logger.
436
+ * @return void
437
+ *
438
+ * @since 7.1.1
439
+ */
440
+ static VALUE
441
+ rb_grn_query_logger_s_set_flags (VALUE klass, VALUE rb_flags)
442
+ {
443
+ VALUE rb_parsed_flags;
444
+
445
+ rb_parsed_flags = rb_funcall(mGrnQueryLoggerFlags, id_parse, 1, rb_flags);
446
+ grn_default_query_logger_set_flags(NUM2UINT(rb_parsed_flags));
447
+
448
+ return rb_flags;
406
449
  }
407
450
 
408
451
  void
@@ -441,6 +484,12 @@ rb_grn_init_query_logger (VALUE mGrn)
441
484
  rb_define_singleton_method(cGrnQueryLogger, "rotate_threshold_size=",
442
485
  rb_grn_query_logger_s_set_rotate_threshold_size,
443
486
  1);
487
+ rb_define_singleton_method(cGrnQueryLogger, "flags",
488
+ rb_grn_query_logger_s_get_flags,
489
+ 0);
490
+ rb_define_singleton_method(cGrnQueryLogger, "flags=",
491
+ rb_grn_query_logger_s_set_flags,
492
+ 1);
444
493
 
445
494
  mGrnQueryLoggerFlags = rb_define_module_under(cGrnQueryLogger, "Flags");
446
495
  #define DEFINE_FLAG(NAME) \
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2009-2015 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2009-2017 Kouhei Sutou <kou@clear-code.com>
4
4
  Copyright (C) 2014-2016 Masafumi Yokoyama <yokoyama@clear-code.com>
5
5
 
6
6
  This library is free software; you can redistribute it and/or
@@ -2646,6 +2646,172 @@ rb_grn_table_rename (VALUE self, VALUE rb_name)
2646
2646
  return self;
2647
2647
  }
2648
2648
 
2649
+ /*
2650
+ * @overload load_arrow(path)
2651
+ *
2652
+ * Loads records from Apache Arrow file format file.
2653
+ *
2654
+ * @param path [String, #to_path] the path of file in Apache Arrow
2655
+ * file format.
2656
+ *
2657
+ * @return [void]
2658
+ *
2659
+ * @since 7.0.3
2660
+ */
2661
+ static VALUE
2662
+ rb_grn_table_load_arrow (VALUE self, VALUE rb_path)
2663
+ {
2664
+ int rc;
2665
+ grn_ctx *context;
2666
+ grn_obj *table;
2667
+
2668
+ rb_grn_table_deconstruct(SELF(self), &table, &context,
2669
+ NULL, NULL, NULL,
2670
+ NULL, NULL,
2671
+ NULL);
2672
+
2673
+ {
2674
+ VALUE rb_path_string;
2675
+ rb_path_string = rb_grn_check_convert_to_string(rb_path);
2676
+ if (NIL_P(rb_path_string)) {
2677
+ ID to_path;
2678
+ CONST_ID(to_path, "to_path");
2679
+ rb_path_string = rb_check_funcall(rb_path, to_path, 0, 0);
2680
+ if (rb_path_string == Qundef) {
2681
+ rb_path_string = rb_path;
2682
+ }
2683
+ rb_path = rb_grn_convert_to_string(rb_path_string);
2684
+ }
2685
+ }
2686
+
2687
+ rc = grn_arrow_load(context, table, StringValueCStr(rb_path));
2688
+ rb_grn_context_check(context, self);
2689
+ rb_grn_rc_check(rc, self);
2690
+
2691
+ return self;
2692
+ }
2693
+
2694
+ /*
2695
+ * @overload dump_arrow(path, options)
2696
+ *
2697
+ * Dump records to file in Apache Arrow file format.
2698
+ *
2699
+ * @param path [String, #to_path] the output file path.
2700
+ *
2701
+ * @param options [::Hash] the options.
2702
+ *
2703
+ * @option options :columns [::Array<Groonga::Column>] (nil) the
2704
+ * columns to be dumped.
2705
+ *
2706
+ * If you don't specify neither `:columns` and `:column_names`,
2707
+ * all columns are dumped. It's the default.
2708
+ *
2709
+ * @option options :column_names [::Array<Groonga::Column>] (nil)
2710
+ * the column names to be dumped. If `:columns` is specified,
2711
+ * `:column_names` is ignored.
2712
+ *
2713
+ * If you don't specify neither `:columns` and `:column_names`,
2714
+ * all columns are dumped. It's the default.
2715
+ *
2716
+ * @return [void]
2717
+ *
2718
+ * @since 7.0.3
2719
+ */
2720
+ static VALUE
2721
+ rb_grn_table_dump_arrow (int argc, VALUE *argv, VALUE self)
2722
+ {
2723
+ int rc;
2724
+ grn_ctx *context;
2725
+ grn_obj *table;
2726
+ const char *path;
2727
+ VALUE rb_path;
2728
+ VALUE rb_options;
2729
+ VALUE rb_columns = Qnil;
2730
+ VALUE rb_column_names = Qnil;
2731
+
2732
+ rb_scan_args(argc, argv, "11", &rb_path, &rb_options);
2733
+ rb_grn_scan_options(rb_options,
2734
+ "columns", &rb_columns,
2735
+ "column_names", &rb_column_names,
2736
+ NULL);
2737
+
2738
+ rb_grn_table_deconstruct(SELF(self), &table, &context,
2739
+ NULL, NULL, NULL,
2740
+ NULL, NULL,
2741
+ NULL);
2742
+
2743
+ {
2744
+ VALUE rb_path_string;
2745
+ rb_path_string = rb_grn_check_convert_to_string(rb_path);
2746
+ if (NIL_P(rb_path_string)) {
2747
+ ID to_path;
2748
+ CONST_ID(to_path, "to_path");
2749
+ rb_path_string = rb_check_funcall(rb_path, to_path, 0, 0);
2750
+ if (rb_path_string == Qundef) {
2751
+ rb_path_string = rb_path;
2752
+ }
2753
+ rb_path = rb_grn_convert_to_string(rb_path_string);
2754
+ }
2755
+ }
2756
+ path = StringValueCStr(rb_path);
2757
+
2758
+ if (NIL_P(rb_columns) && NIL_P(rb_column_names)) {
2759
+ rc = grn_arrow_dump(context, table, path);
2760
+ } else if (!NIL_P(rb_columns)) {
2761
+ grn_obj columns;
2762
+ int i, n;
2763
+
2764
+ rb_columns = rb_grn_convert_to_array(rb_columns);
2765
+
2766
+ GRN_PTR_INIT(&columns, GRN_OBJ_VECTOR, GRN_ID_NIL);
2767
+ n = RARRAY_LEN(rb_columns);
2768
+ for (i = 0; i < n; i++) {
2769
+ VALUE rb_column = RARRAY_PTR(rb_columns)[i];
2770
+ grn_obj *column;
2771
+
2772
+ column = RVAL2GRNOBJECT(rb_column, &context);
2773
+ GRN_PTR_PUT(context, &columns, column);
2774
+ }
2775
+ rc = grn_arrow_dump_columns(context, table, &columns, path);
2776
+ GRN_OBJ_FIN(context, &columns);
2777
+ } else if (!NIL_P(rb_column_names)) {
2778
+ grn_obj columns;
2779
+ int i, n;
2780
+
2781
+ rb_column_names = rb_grn_convert_to_array(rb_column_names);
2782
+
2783
+ GRN_PTR_INIT(&columns, GRN_OBJ_VECTOR, GRN_ID_NIL);
2784
+ n = RARRAY_LEN(rb_column_names);
2785
+ for (i = 0; i < n; i++) {
2786
+ VALUE rb_column_name = RARRAY_PTR(rb_column_names)[i];
2787
+ grn_obj *column;
2788
+
2789
+ column = grn_obj_column(context, table,
2790
+ RSTRING_PTR(rb_column_name),
2791
+ RSTRING_LEN(rb_column_name));
2792
+ if (!column) {
2793
+ continue;
2794
+ }
2795
+ GRN_PTR_PUT(context, &columns, column);
2796
+ }
2797
+ rc = grn_arrow_dump_columns(context, table, &columns, path);
2798
+ n = GRN_BULK_VSIZE(&columns) / sizeof(grn_obj *);
2799
+ for (i = 0; i < n; i++) {
2800
+ grn_obj *column;
2801
+
2802
+ column = GRN_PTR_VALUE_AT(&columns, i);
2803
+ if (column->header.type == GRN_ACCESSOR) {
2804
+ grn_obj_unlink(context, column);
2805
+ }
2806
+ }
2807
+ GRN_OBJ_FIN(context, &columns);
2808
+ }
2809
+ rb_grn_context_check(context, self);
2810
+ rb_grn_rc_check(rc, self);
2811
+
2812
+ return self;
2813
+ }
2814
+
2649
2815
  void
2650
2816
  rb_grn_init_table (VALUE mGrn)
2651
2817
  {
@@ -2733,6 +2899,9 @@ rb_grn_init_table (VALUE mGrn)
2733
2899
 
2734
2900
  rb_define_method(rb_cGrnTable, "rename", rb_grn_table_rename, 1);
2735
2901
 
2902
+ rb_define_method(rb_cGrnTable, "load_arrow", rb_grn_table_load_arrow, 1);
2903
+ rb_define_method(rb_cGrnTable, "dump_arrow", rb_grn_table_dump_arrow, -1);
2904
+
2736
2905
  rb_grn_init_table_key_support(mGrn);
2737
2906
  rb_grn_init_array(mGrn);
2738
2907
  rb_grn_init_hash(mGrn);