Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(JP) varchar型のカラムをorder byに指定するとコンパイルエラーとなる #25

Closed
taiki-k opened this issue May 28, 2014 · 2 comments
Labels
bug developer confirmed the steps to reproduce the problem, and does not work as expected

Comments

@taiki-k
Copy link
Contributor

taiki-k commented May 28, 2014

varchar型カラムのソートを試したところ、OpenCLコードのコンパイルエラーとなりました。

  • エラーメッセージ
ERROR:  PG-Strom: OpenCL execution error (build program failure)
#ifndef PG_BYTEA_TYPE_DEFINED
STROMCL_VARLENA_TYPE_TEMPLATE(bytea)
#endif
#ifndef PG_VARCHAR_TYPE_DEFINED
STROMCL_VARLENA_TYPE_TEMPLATE(varchar)
#endif
#ifndef PG_INT4_TYPE_DEFINED
STROMCL_SIMPLE_TYPE_TEMPLATE(int4,cl_int)
#endif
#ifndef PG_TEXT_TYPE_DEFINED
STROMCL_VARLENA_TYPE_TEMPLATE(text)
#endif

#define KPARAM_0        pg_bytea_param(kparams,errcode,0)
#define KPARAM_1        pg_bytea_param(kparams,errcode,1)

static cl_int
gpusort_comp(__private int *errcode,
             __global kern_column_store *kcs_x,
             __global kern_toastbuf *ktoast_x,
             __private cl_int x_index,
             __global kern_column_store *kcs_y,
             __global kern_toastbuf *ktoast_y,
             __private cl_int y_index)
{
  pg_varchar_t keyval_x1;
  pg_varchar_t keyval_y1;
  pg_int4_t comp;

  keyval_x1 =pg_varchar_vref(kcs_x,ktoast_x,errcode,0,x_index);
  keyval_y1 =pg_varchar_vref(kcs_y,ktoast_y,errcode,0,y_index);
  if (!keyval_x1.isnull && !keyval_y1.isnull)
  {
    comp = pgfn_text_cmp(errcode, keyval_x1, keyval_y1);
    if (comp.value != 0)
      return comp.value;
  }
  else if (keyval_x1.isnull && !keyval_y1.isnull)
    return 1;
  else if (!keyval_x1.isnull && keyval_y1.isnull)
    return -1;

  return 0;
}

DETAIL:  Compilation started
1:2352:35: error: passing 'pg_varchar_t' to parameter of incompatible type 'pg_text_t'
1:2307:52: note: passing argument to parameter 'arg1' here
Compilation failed
  • 使用したSQL
SELECT * FROM varchar_test WHERE str < '!9' ORDER BY str;
  • 使用したテーブル
        Table "public.varchar_test"
 Column |         Type          | Modifiers
--------+-----------------------+-----------
 id     | integer               |
 len    | smallint              |
 str    | character varying(64) |
@kaigai
Copy link
Contributor

kaigai commented May 29, 2014

PostgreSQLがtextやvarcharなど可変長データ型を同じデータフォーマットを持つ
varlena型変数として扱っており、内部関数(テキスト比較など)もそれを前提として
作られている。

が、PG-Stromは個別にデータ型を定義したために OpenCL コンパイラは別々の
非互換なデータ型であると認識し、引数の型チェックで弾かれた。
最新版では、全ての varlena データ型は pg_varlena_t の別名であるとして修正。

@taiki-k
Copy link
Contributor Author

taiki-k commented May 29, 2014

最新版で再現確認を行ったところ、コンパイルエラーは発生しなくなりました。
修正されたものと判断します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug developer confirmed the steps to reproduce the problem, and does not work as expected
Projects
None yet
Development

No branches or pull requests

2 participants